亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 JSON.Net 解析具有唯一字符串作為父級的 JSON 對象

使用 JSON.Net 解析具有唯一字符串作為父級的 JSON 對象

PHP
慕村9548890 2024-01-20 15:57:16
假設我有這個 JSON 示例:"Test": {        "KIf42N7OJIke57Dj6dkh": {            "name": "test 1"        },        "xsQMe4WWMu19qdULspve": {            "name": "test 2"        }}我想將其解析為我擁有的自定義類的數組,如下所示:class Class1 {    public string Name { get; set; }    Class1(string name) {        Name = name;    }}我如何使用 Json.NET 解析它JObject.Parse?
查看完整描述

2 回答

?
隔江千里

TA貢獻1906條經驗 獲得超10個贊

您可以使用JPath查詢來實現您的目標,如下所示:

var myArray = JObject

? ? .Parse(json)

? ? .SelectTokens("$.Test..name")

? ? .Values<string>()

? ? .Select(s => new Class1(s))

? ? .ToArray();

但可能不是最好的方法。


我個人更喜歡創建類來表示 json 結構,然后應用轉換。


void Main()

{

? ? var json = @"{""Test"": {

? ? ? ? ""KIf42N7OJIke57Dj6dkh"": {

? ? ? ? ? ? ""name"": ""test 1""

? ? ? ? ? ? },

? ? ? ? ? ? ""xsQMe4WWMu19qdULspve"": {

? ? ? ? ? ? ""name"": ""test 2""

? ? ? ? ? ? }

? ? }

? ? }";


? ? var root = JsonConvert.DeserializeObject<Root>(json);

? ? var array = root.Test.Select(i => i.Value).ToArray();

? ? array.Dump();

}


public class Root

{

? ? public Dictionary<string, Class1> Test { get; set; }

}


public class Class1

{


? ? public string Name { get; set; }


? ? public Class1(string name)

? ? {

? ? ? ? Name = name;

? ? }

}


查看完整回答
反對 回復 2024-01-20
?
慕哥9229398

TA貢獻1877條經驗 獲得超6個贊

首先,您的 Json 缺少開始/結束大括號。Json 需要用大括號括住 Test 值。


{

? ? 'Test':?

? ? {

? ? ? ? ? ? 'KIf42N7OJIke57Dj6dkh': {'name': 'test 1'},

? ? ? ? ? ? 'xsQMe4WWMu19qdULspve': {'name': 'test 2'}

? ? }

}

如果原始 Json 中缺少它,您可以將當前輸入的 Json 包裝如下。


var correctedJson = $"{{{inputJsonString}}}";

如果您想將 Json 對象解析為數組Class1?而不創建額外的具體數據結構并使用JPath Queries,您可以使用Json.Net 證明的DeserializeAnonymousTypeAnonymous Types方法來實現此目的。例如,

var sampleObject = new {Test = new Dictionary<string,Class1>()};

var data = JsonConvert.DeserializeAnonymousType(correctedJson,sampleObject);

var result = data.Test.Select(x=>x.Value).ToArray();

您還可以使用 JPath 查詢或創建具體數據結構作為@Kalten 來實現它,如他的答案中所述。


查看完整回答
反對 回復 2024-01-20
  • 2 回答
  • 0 關注
  • 181 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號