我有这样的json表,如何尝试特定数据?
var json_str={ "table1":[
{"name1":"data1"},
{"name2":"data2"},
{"name3":"data3"}
],
"table2":[
{"name1":"data1"},
{"name2":"data2"},
{"name3":"data3"}
]
}
dynamic stuff = JsonConvert.DeserializeObject(json_string);
//I'd like attempt to data like this(for example)
var abc=stuff.table1["name1"];
这显然是错误的,但是有什么方法可以通过名称来调用json表的内容吗?
已解决: 我将json更改为
var json_str={ "table1":{
"name1":"data1",
"name2":"data2",
"name3":"data3"
},
"table2":{
"name1":"data1",
"name2":"data2",
"name3":"data3"
}
}
var abc=JsonConvert.DeserializeObject<Form1.RootObject>(json_str);
,现在我尝试通过以下方式进行尝试:
abc.table1.name2;
非常感谢xdtTransform和所有人的提示。
答案 0 :(得分:0)
只需使用点符号即可。
工作示例:
using System;
using System.Collections.Generic;
using Newtonsoft.Json;
public class Program
{
public static void Main()
{
var json_str = "{ \"table1\":[{\"name1\":\"data1\"},{\"name2\":\"data2\"},{\"name3\":\"data3\"}],\"table2\":[{\"name1\":\"data1\"},{\"name2\":\"data2\"},{\"name3\":\"data3\"}]}";
dynamic stuff = JsonConvert.DeserializeObject(json_str);
Console.WriteLine(stuff.table2[0].name1); // prints "data1"
}
}
替代:
stuff["table2"][0]["name1"]
您的为什么不工作:
var abc=stuff.table1["name1"];
您不能直接访问“ name1”,因为它在对象数组内部。以[0]作为第一个元素,之后可以访问name1。
答案 1 :(得分:0)
为什么不将您的Json反序列化为强类型对象,如以下示例所示
class Program
{
static void Main(string[] args)
{
var json_str = "{ table1:[{name:'data1'}," +
"{name:'data2'},{name:'data3'}]," +
"table2:[{name:'data1'},{name:'data2'},{name:'data3'}]}";
var collection = JsonConvert.DeserializeObject<TableCollectionObject>(json_str);
foreach (var item in collection.table1)
{
Console.WriteLine(item.name);
}
foreach (var item in collection.table2)
{
Console.WriteLine(item.name);
}
Console.ReadLine();
}
}
class TableCollectionObject
{
public ICollection<SingleTableObject> table1 { get; set; }
public ICollection<SingleTableObject> table2 { get; set; }
}
class SingleTableObject
{
public string name { get; set; }
}
请注意,我已将您的Json更改为可以由Newtonsoft.Json库解析的有效json对象。
答案 2 :(得分:0)
JObject.Parse
JObject o = JObject.Parse(json);
var name = o["table1"][0]["name1"].Value<string>();// data1
var name2 = o["table2"][2]["name3"].Value<string>();// data3
Dicstionary
,List
,Dictionary
var d = System.Text.Json.JsonSerializer.Deserialize<Dictionary<string,List<Dictionary<string,string>>>>(json);
var nameB = d["table1"][0]["name1"]; // data1
var nameB2 = d["table2"][2]["name3"]; // data3
这是我使用的测试数据。
var json = @"{ ""table1"":[
{""name1"":""data1""},
{""name2"":""data2""},
{""name3"":""data3""}
],
""table2"":[
{""name1"":""data1""},
{""name2"":""data2""},
{""name3"":""data3""}
]
}";
这是一种常见的数据结构,因为数组中的第一项具有一个称为name1
的属性,而第二项具有一个名为name2
的单一属性。
更常见的架构如下所示。
{
"table1": [
{
"name1": "data1", "name2": "data2", "name3": "data3",
},
{
"name1": "data1", "name2": "data2", "name3": "data3"
}
]
}