{"name":"lily","age":23,"addr":{"city":guangzhou,"province":guangdong}}
引用命名空间
using Newtonsoft.Json
using Newtonsoft.Json.Linq
可以把上面的JSON看成一个对象.你只要写对应的类即可
public class UserInfo
{
public string name
public int age
public address addr
}
public class address
{
public string city
public string province
}
然后在解析的地方这样写:
string jsonData="{\"name\":\"lily\",\"age\":23,\"addr\":{\"city\":guangzhou,\"province\":guangdong}}"
UserInfo user=(UserInfo)JsonConvert.DeserializeObject(jsonData, typeof(UserInfo))
得到City的值只要:user.addr.City
这样实现也行
JObject jsonObj = JObject.Parse(jsonData)
string name=jsonObj ["name"].ToString()
string age=jsonObj ["age"].ToString()
string city=((JObject )jsonObj ["addr"])["city"].ToString()
string province=((JObject )jsonObj ["addr"])["province"].ToString()
如 何这个json是动态的呢?譬如让你输入一个json,如{"name":"lily","age":23,"addr": {"city":guangzhou,"province":guangdong}}; 然后让你输入一个对象,如city,然后系统会输出guangzhou这个值,那这样的话,json就是动态生成的了,我想了解有没有读取这样的json 的方法。(注意,json是多级嵌套的。)
就用遍历
public string GetJsonValue(JEnumerable<JToken>jToken,string key)
{
IEnumerator enumerator = jToken.GetEnumerator()
while (enumerator.MoveNext())
{
JToken jc = (JToken)enumerator.Current
if (jc is JObject||((JProperty)jc).Value is JObject)
{
return GetJsonValue(jc.Children(), key)
}
else
{
if (((JProperty)jc).Name == key)
{
return ((JProperty)jc).Value.ToString()
}
}
}
return null
}
在调用的时候:
string jsonData = "{\"name\":\"lily\",\"age\":23,\"addr\":{\"city\":\"guangzhou\",\"province\":\"guangdong\"}}"
JObject jsonObj = JObject.Parse(jsonData)
Response.Write(GetJsonValue(jsonObj.Children(), "province"))
如果有多层嵌套的数组
string jsonData = "{\"addr\":[{\"city\":\"guangzhou\",\"province\":\"guangdong\"},{\"city\":\"guiyang\",\"province\":\"guizhou\"}]}"
JObject jsonObj = JObject.Parse(jsonData)
JArray jar = JArray.Parse(jsonObj["addr"].ToString())
JObject j = JObject.Parse(jar[0].ToString())
Response.Write(j["city"])
JSON转XML
string xmlstr=((XmlDocument)JsonConvert.DeserializeXmlNode(jsonData)).InnerXml.ToString()
使用C++和别的语言做交互比较常用的一种数据 *** 作方式就是json。解析json数据
void TranslateJson(const string strData)
{
// 解析json用Json::Reader
Json::Reader *readerinfo = new Json::Reader(Json::Features::strictMode())
// Json::Value是一种很重要的类型,可以代表任意类型。如int, string, object, array...
Json::Value root
if (readerinfo->parse(strData, root))
{
if (root["id"].isInt())
{
int nID = root["id"].asInt()
}
if (root["time"].isString())
{
std::string strTime = root["time"].asString()
}
if (root["data"]["count"].isInt())
{
int nDataCount = root["data"]["count"].asInt()
}
if (root["data"]["name"].isString())
{
std::string strDataName = root["data"]["name"].asString()
}
}
::delete readerinfo
readerinfo = NULL
}
存储JSON文档所需的空间与LONGBLOB或LONGTEXT大致相同;存储在JSON列中的任何JSON文档的大小都限制为max_allowed_packet系统变量的值。可以使用JSON_STORAGE_SIZE( )函数获取存储JSON文档所需的空间量。
["ade", 12, null, true, false]
{"k1": "value", "k2": 2}
[99, [78, "e"], {"k1": 1, "k2": "a"}, "de"]
{"k1": 1, "k2": [10, "s"]}
使用JSON路径表达式选择JSON文档中的值。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)