[英]How get List of JSON Objects from within a JSON object (non-array) (NOT Deserializing)
我在 Json.NET NuGet 中使用 C#。 我有如下所示的 JSON:
{
"pre" : "",
"options": {
"0001" : {
"id" : "0001",
"desc" : "first"
},
"0002" : {
"id" : "0002",
"desc" : "second"
},
"0003" : {
"id" : "0003",
"desc" : "third"
}
},
"post" : ""
}
List<JObject>
?或者/還有我怎樣才能得到第 2 項應該是的第二項:
{ "id" : "0002", "desc" : "second" }
我試過類似的東西
var items = json.SelectTokens("options[*]").ToList();
和
var item = json.SelectTokens("options[1]");
但那些顯然不起作用。
編輯:
如果我不清楚,我不想反序列化。 我想要一個List<JObject>
。
你的 json 是有效的,但你對這個 json 的想法不太准確。
您認為 options 有一個您想要迭代的對象列表,但事實並非如此。 options
不是一個列表,而是一個包含更多對象的對象。不是一個數組。
您可以通過首先查找 JObject 的屬性來訪問 JObject 中的每個元素。 屬性是 0001、0002 等。一旦你有了這些,你就可以遍歷選項的屬性並獲得你需要的值。
JObject options = (JObject)JObject.Parse(json)["options"];
// Get a list of all tokens within this object.
List<JObject> allObjects = new List<JObject>();
foreach (var node in options.Properties())
allObjects.Add((JObject)options[node.Name]);
// Access the IDs
allObjects.ForEach(x => Console.WriteLine(x["id"].ToString()));
// Access the 2nd ID only
Console.WriteLine(); // Just to space it out.
Console.WriteLine(allObjects[1]["id"].ToString());
輸出
0001
0002
0003
0002
您可以使用 Linq 創建所需的列表。 例如,
var list = ((JObject)JObject.Parse(str)["options"])
.Properties()
.Select(x=>x.Value)
.Cast<JObject>()
.ToList();
要訪問第二個元素,您可以使用
var secondId = (string)list[1]["id"];
var secondDesc = (string)list[1]["desc"];
我實際上很接近但太努力了:
var items = json.SelectToken("options").ToList();
我無法弄清楚如何從查詢中獲取單個選項,但由於我得到了整個列表,我是這樣做的:
var item = json.SelectToken("options").ToList()[1];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.