C#解析多层Json数据

[事件回顾]

今天在做一个小项目的时候,想获取一下位置,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;

  //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<IP>(ip);
            //       List<string> videogames = Newtonsoft.Json.JsonConvert.DeserializeObject<lis<string>>(ip);  第四种
            //    var htmlAttributes = Newtonsoft.Json.JsonConvert.DeserializeObject<IP>(ip); 第五种
            //    string aaa = htmlAttributes.ip;
            // var user = (IP)JsonConvert.DeserializeObject(ip, typeof(IP));//反序列化 第六种

        


以上这些方法,简单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 }

解决方法

先创建一个IP类:

 1  public class IP
 2     {
 3         /// <summary>
 4         /// IP地址
 5         /// </summary>
 6         public string ip;
 7         /// <summary>
 8         /// 国家
 9         /// </summary>
10         public string nation;
11         /// <summary>
12         /// 省份
13         /// </summary>
14         public string province;
15         /// <summary>
16         /// 城市
17         /// </summary>
18         public string city;
19         /// <summary>
20         /// 地区
21         /// </summary>
22         public string district;
23         /// <summary>
24         /// 邮编
25         /// </summary>
26         public string adcode;
27
28         public string status;
29
30         public string message;
31         public string result;
32
33         public string location;
34
35         public string lat;
36
37         public string lng;
38
39         public string ad_info;
40
41
42     }

IP类

接着引用

using Newtonsoft.Json.Linq;

使用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,然后发现问题

{
    "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获取出来了

这个难题终于解决了,好了,记录一下

原文地址:https://www.cnblogs.com/whatarey/p/11107861.html

时间: 2024-08-29 07:24:00

C#解析多层Json数据的相关文章

JAVA如何解析多层json数据

1. 使用标准的Json对象,如org.json.JSONObject json = new org.json.JSONObject(yourJsonString);然后通过get(keyString)逐个解析 2. 构造一个类MyObject,根据你提出的问题,其中添加 String name,List<MyObject> child, 两个属性,增加getter setter 方法,通过com.google.gson.Gson进行解析.步骤如下: String jsonStr = &quo

轻松应对多层JSON数据计算与入库

图片和表不方便复制  详情请阅读原文http://c.raqsoft.com.cn/article/1536633176729?r=niu JSON作为一种轻量级的数据交换格式,因其易于读写和交互的特点,已逐渐成为主流的数据类型之一.常见的编程语言大多都对 JSON 的读取与解析提供了接口,但是接下来如何把多层 JSON 数据经过筛选.计算并展开成二维数据,就需要开发人员去头疼了.本文就为大家分享一下如何利用集算器 SPL(结构化处理语言)轻松解决 JSON 数据解析入库的问题. JSON 数据

Java解析(读取)Json数据

以前看过书上说,XML是web service间传输信息的标准格式吧,就看了看XML.最近在做个网站,又说是有了JSON,第一回听说就看了看,总结总结一下. 1.JSON介绍 JSON比XML简单,主要体现在传输相同信息的情况下,文件的大小不同. JSON只用于传输信息,XML还可以用于配置文件的使用. JSON中的符号主要有: " , [ {: 2.JSON中的数组和对象 2.1数组(JSONArray) 数组用一对[],表示存放的是一般的数组数据. 如:["11",&qu

模拟QQ侧滑控件 实现三种界面切换效果(知识点:回调机制,解析网络json数据,fragment用法等)。

需要用到的lib包 :解析json  gson包,从网络地址解析json数据成String字符串的异步网络解析工具AsyncHttpClient等 下载地址:点击下载 Xlistview 下拉上拉第三方框架  点击下载 侧滑菜单的lib  点击下载 1 package com.lixu.testjsonall; 2 3 import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu; 4 import com.jeremyfeinstein.slid

用JQuery解析获取JSON数据

JSON 是一种比较方便的数据形式,下面使用$.getJSON方法,实现获得JSON数据和解析,都挺方便简单的.从http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=? 这个地址得到JSON数据 并且分析里面的结构,生成图片和相关链接等: $(function(){ var url="http://api.flickr.co

Java解析复杂JSON数据的一种方法

1.需解析JSON数据: { "code": 0, "message": "success", "sid": "[email protected]", "data": { "result": { "age": { "age_type": "0", "child": "0.1452

Android解析服务器Json数据实例

Json数据信息如下: { "movies": [ { "movie": "Avengers", "year": 2012, "rating": 7.8, "duration": "141 min", "director": "Joss Whedon", "tagline": "A new age

jQuery遍历多层json数据

1.json与jsonp的区别(待查) 2.要遍历的数据如下: {"status": "ok", "code": 200, "data": {"343946": {"8144": {"feed": 0, "instagram": 0, "livefyre": 21, "facebook": 0, "

【转】java 解析多层json

java分别解析下面两个json字符串 package jansonDemo; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; public class TestJSON { /** * JSON实际上也是键值对("key":"value") * key 必须是字符串,value 可以是合法