C#解析多层Json数据
2021-05-29 00:04
标签:反序列化 没有 福建省 style int img none query VID [事件回顾] 今天在做一个小项目的时候,想获取一下位置,IP地址,然后随便在网上找了一个api调用 https://apis.map.qq.com/ws/location/v1/ip 数据如下: 如果是用Python的话,很简单,请求API-》得到Json-》然后print(["result"]["ip"])就可以了,C#有点麻烦,用了多个方法来解决 前提是先引入 using Newtonsoft.Json.Linq;,或者 using Newtonsoft.Json; 解决方法 先创建一个IP类: 接着引用 使用JArray.Parse(ip ); 当然,你这一步直接运行是会报错的,报错的大致意思是,这不是一个数组 我们怎么办呢->答案是 拼接一下,加上一个[ ] JArray jarry = JArray.Parse("[" + ip + "]"); 解析 string a= ["result"]["ip"].ToString(); 但是这样子,报错,说是result这里是要传入一个int32类型的数据 ???? 嗯,很奇怪啊 然后我们换一下 : string a= [0]["ip"].ToString(); 出现问题了:说是ip 找不到这个字段属性 ??又怎么了 然后下标法 : string a= [0][1].ToString(); 说是索引超过界限 试了几次,发现总是出现类似索引超过界限的问题,最后 自己的看了一下这段json,然后发现问题 这个难题终于解决了,好了,记录一下 C#解析多层Json数据 标签:反序列化 没有 福建省 style int img none query VID 原文地址:https://www.cnblogs.com/whatarey/p/11107861.html //string ip = "{\"status\": 311, \"message\": \"key格式错误\"}";
// JsonReader reader = new JsonReader(new StringReader(ip));
// JsonReader reader = new JsonReader();
////ip 表示的json字符串为json对象 第一种
//JObject jsonObj = JObject.Parse(ip);
//ip 表示的json字符串为json数组 第二种
JArray jarry = JArray.Parse("[" + ip + "]");
//第三种
//IP bk1 = JsonConvert.DeserializeObject
以上这些方法,简单Json都可以解析获取到 ,比如这个Json格式: //string ip = "{\"status\": 311, \"message\": \"key格式错误\"}";
但是对于这段Json就不能用了
1 {
2 "status": 0,
3 "message": "query ok",
4 "result": {
5 "ip": "27.154.44.20",
6 "location": {
7 "lat": 24.61854,
8 "lng": 118.24722
9 },
10 "ad_info": {
11 "nation": "中国",
12 "province": "福建省",
13 "city": "厦门市",
14 "district": "翔安区",
15 "adcode": 350213
16 }
17 }
18 }
1 public class IP
2 {
3 ///
using Newtonsoft.Json.Linq;{
"status": 0,
"message": "query ok",
"result": {
"ip": "27.154.44.20",
"location": {
"lat": 24.61854,
"lng": 118.24722
},
"ad_info": {
"nation": "中国",
"province": "福建省",
"city": "厦门市",
"district": "翔安区",
"adcode": 350213
}
}
}
第一个必须是0,才能进入下一个方法传值
于是我想 第一个是0 ,那是应为他有{}
下面没有,是不是不用写呢?
于是试了一下
string a= jarry[0]["result"]["ip"].ToString();
ip获取出来了
上一篇:c#枚举