c#中怎么解析多层json数据

c#中怎么解析多层json数据,第1张

在.net 2.0中提取这样的json

{"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文档中的值。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/sjk/9873898.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存