首页新闻找找看学习计划

Newtonsoft.Json 如何处理如下格式json数据

0
悬赏园豆:20 [已解决问题] 解决于 2018-01-17 14:06

如下图:贴数据报错,所以贴了图。。。。。。。。。。。。。

BetterCoder的主页 BetterCoder | 初学一级 | 园豆:107
提问于:2018-01-14 21:53
< >
分享
最佳答案
0

有个东西叫dynamic,你把JsonConvert.DeserializeObject(json)的返回值类型写成dynamic即可,然后这个类型的变量就可以像实体类一样点出来需要的对象,但是不会有提示,只要点出来的东西是真实存在的,就可以获取到值。

按你的意思,要取第二个Rows里的数据是这样:

  

  string json = "{Tables:[{Rows:[[1,2,3]]},{Rows:[[4,5,6],[7,8,9],[10,11,12]]}]}";
            dynamic jobj = JsonConvert.DeserializeObject(json);
            var n = jobj.Tables[1].Rows[1][1].Value;//这里取出来的是8
收获园豆:20
龙行天涯 | 小虾三级 |园豆:1832 | 2018-01-16 14:56
其他回答(10)
0

你要处理成什么样

吴瑞祥 | 园豆:28733 (高人七级) | 2018-01-14 22:12

我要取第二个Rows里面的每一行里面的数据。

支持(0) 反对(0) BetterCoder | 园豆:107 (初学一级) | 2018-01-15 09:42
0

{}代表对象[]代表数组,你想怎么用?

DanBrown | 园豆:1496 (小虾三级) | 2018-01-15 08:05
0

你这没体现什么问题。

花飘水流兮 | 园豆:10340 (专家六级) | 2018-01-15 08:57

额,以前都是处理成实体类调用json,但是这个格式,不知道怎么定义实体类了。

支持(0) 反对(0) BetterCoder | 园豆:107 (初学一级) | 2018-01-15 09:44

@BetterCoder: 这么jb简单会看不懂,这种都是格式化的东西,也根本不必人写。

给你个简单办法,你也不用写类了,直接jscript命名空间下的 反序列化 成 Dictionary<string,object>就行了。

支持(0) 反对(0) 花飘水流兮 | 园豆:10340 (专家六级) | 2018-01-15 09:57
0

感觉json的格式有问题呀,圈起来的部分应该是json对象(键值对形式)吧。

~冰 | 园豆:497 (菜鸟二级) | 2018-01-15 09:17

这种也是json,我校验过。

支持(0) 反对(0) BetterCoder | 园豆:107 (初学一级) | 2018-01-15 09:45
0

可以将tables下的rows转成实体

心怀宇宙 | 园豆:622 (小虾三级) | 2018-01-15 09:57
0

整个JSON对象只有一个属性叫Tables,名为Tables的属性是个数组,这个数组包含三个元素,这三个元素是结构相同的JSON对象,都只包含三个名为Rows的属性,而且它们都是一个数组,但这三个数组的结构不同。

第一个:[[,]]

第二个:[[,,,,,,,,,,,,,,,,] , ......]

第三个:[[,,,,,,]]

西漠以西 | 园豆:1670 (小虾三级) | 2018-01-15 11:41
0

感觉这种不要用反序列化的方式。

数据酷软件 | 园豆:197 (初学一级) | 2018-01-15 16:50

那怎么用?难道截取字符串?

支持(0) 反对(0) BetterCoder | 园豆:107 (初学一级) | 2018-01-16 09:44
0

JObject.Parse(json)["Tables"][1]["Rows"]

jello chen | 园豆:7091 (大侠五级) | 2018-01-15 21:44
0

JavaScriptSerializer serializer = new JavaScriptSerializer();
Dictionary<string, object> rst = (Dictionary<string, object>)serializer.DeserializeObject(jsonData);
object[] rowsDataList = (object[])rst["Tables"];
foreach (object rowDataObj in rowsDataList)
{
Dictionary<string, object> rowsDataDic = (Dictionary<string, object>)rowDataObj;
object[] rowsDataLines = (object[])rowsDataDic["Rows"];
foreach (var rowsData in rowsDataLines)
{
object[] rowArrayData = (object[])rowsData;
Console.WriteLine(rowArrayData[1].ToString());
}
}

BetterCoder | 园豆:107 (初学一级) | 2018-01-17 14:04
0

用VS2013以上,可以直接把JSON(XML)粘贴为实体类。

zhangweiwen | 园豆:904 (小虾三级) | 2018-01-17 16:18
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册