概述
json.net库中的jtoken对象非常有用,您可以访问json对象和数组,而不需要一组复杂的域模型类。当我必须访问复杂对象图的一些独立属性时,我使用它。我不想为了访问几个属性而定义一大堆样板类。
当您不知道json如何或何时更改时,jtoken类型也非常有用。使类层次结构保持最新是非常痛苦的。
您可能已经有了用于反序列化json的类,您仍然可以使用jtoken作为期望json更改的属性。
对数据对象列表使用jtokens是可行的。
对于您的情况:
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
public class demo
{
[JsonProperty(PropertyName = "a1")]
public int? a1 { get; set; }
[JsonProperty(PropertyName = "a2")]
public int? a2 { get; set; }
[JsonProperty(PropertyName = "a3")]
public int? a3 { get; set; }
[JsonProperty(PropertyName = "data")]
public List data { get; set; }
}
var json = @"{
""a1"": 10,
""a2"": 11,
""a3"": 13,
""uuid"": ""1c18f0c8-02d0-425a-8dc7-13dc6d0b46af"",
""data"": [
{
""id"": 1,
""timeStamp"": ""2018-01-03T08:01:00Z"",
""quantity"": 200.0,
""tag"": ""/sometag/""
},
{
""id"": 2,
""timeStamp"": ""2018-01-03T08:05:00Z"",
""quantity"": 100.0,
""tag"": ""/someothertag/""
},
{
""id"": 3,
""name"": ""somename"",
""age"": 32
}
]
}";
var demo1 = JsonConvert.DeserializeObject(json);
// Let's get the timeStamp of item 2.
var timeStamp = demo1.data[1].SelectToken("timeStamp").ToObject();
// Let's get the age of item 3.
var age = demo1.data[2].SelectToken("age").ToObject();
你也可以使用jtoken.parse来完成整个过程,例如。
var obj1 = JToken.Parse(json);
// Get a1
var a1 = obj1.SelectToken("a1", false).ToObject();
// Get uuid
var uuid = obj1.SelectToken("uuid", false).ToObject();
// Let's get the timeStamp of item 2.
var timeStamp = obj1.SelectToken("data[1].timeStamp").ToObject();
// Let's get the age of item 3.
var age = obj1.SelectToken("data[2].age").ToObject();
调用selectToken方法时,可以传递参数errorWhenNoMatch,以指示在属性/值不存在时是否应引发错误。这允许您在json数据结构未知时编写一些非常健壮的代码。
如果要枚举/遍历属性,可以执行以下操作:
static void TraverseProperties(JToken jtoken)
{
foreach (var value in jtoken.Values())
{
if (!value.HasValues)
{
Console.WriteLine(value.Path + ": " + value.ToObject());
}
else
{
TraverseProperties(value);
}
}
}
TraverseProperties(obj1);
最后
以上就是矮小棒球为你收集整理的c语言遍历json数组,如何使用c动态获取所有json元素?的全部内容,希望文章能够帮你解决c语言遍历json数组,如何使用c动态获取所有json元素?所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复