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

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

從父對象名稱不固定的 JSON 字符串訪問屬性

從父對象名稱不固定的 JSON 字符串訪問屬性

C#
喵喵時光機 2022-10-23 16:00:51
我有以下 JSON 字符串,我需要從中訪問名為“Mode”的屬性值:{  "CommomData": {    "DateTime": {      "Year": 2019,      "Month": 3,      "Day": 11,      "Hour": 14,      "Min": 1,      "Second": 29    }  },  "Status": {    "Mode": "Test",    "Loc": "Test"  }}如果您在此處記下“Mode”的父屬性名稱,這里是“Status”,但這可能會更改為“LatestStatus”或“FirstStatus”或任何其他值。目前,我已經編寫了下面的代碼,它工作正常,但操作大約需要 60 到 150 毫秒(我們希望減少這個時間)。請注意,該對象有更多屬性,但我只發布了一些來解釋這個問題。在不知道對象類型和父屬性名稱的情況下,是否有任何其他最佳方法可以從 JSON 字符串中獲取值?JObject payloadJObject = JObject.Parse(payload);foreach (var item in payloadJObject){    foreach (JProperty subitem in item.Value.ToList())    {        if (subitem.Name == "Mode")        {            return Convert.ToString(subitem.Value);        }    }}
查看完整描述

1 回答

?
有只小跳蛙

TA貢獻1824條經驗 獲得超8個贊

根據您對“最佳”的定義:

在 JSON 中某處查找屬性的最短方法是將 JSON 解析為 a JObject,然后SelectToken與遞歸下降JsonPath 表達式一起使用:

public static string FindFirst(string json, string propertyName){
    return JObject.Parse(json).SelectToken("$.." + propertyName)?.ToString();}

小提琴:https ://dotnetfiddle.net/JQxu9c

我知道用 Json.Net 做同樣事情的最快JsonTextReader方法是使用:

public static string FindFirst(string json, string propertyName)

{

    using (StringReader sr = new StringReader(json))

    using (JsonReader reader = new JsonTextReader(sr))

    {

        while (reader.Read())

        {

            if (reader.TokenType == JsonToken.PropertyName && 

                reader.Value.ToString() == propertyName)

            {

                return reader.ReadAsString();

            }

        }

        return null;

    }

}

小提琴:https ://dotnetfiddle.net/aR3qVe


查看完整回答
反對 回復 2022-10-23
  • 1 回答
  • 0 關注
  • 99 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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