簡體   English   中英

如何遍歷json對象中的項目並檢索C#中的特定值?

[英]How do I iterate through items in a json object and retrieve a specific value in C#?

我有一個json字符串,我想對其進行迭代以檢索特定值。 在此對象中,有多個項目,每個項目具有相同的元素。 我想做的是在每個項目中搜索其request_item.u_requested_for.user_name,並將其與另一個值進行比較。 如果不匹配,請繼續。 如果確實匹配,那么我想檢索request_item.u_requested_for.sys_id值。 此外,json的大小將不會總是相同。 有時會有5個元素,而其他時候是20個。我如何遍歷每個項目,進行比較,然后檢索所需的其他值?

我已經使用我發現的其他想法來解決這個問題,但是我無法真正使其發揮作用。 首先,我應該使用JObject.Parse()將字符串解析為一個對象嗎? 還是應該繼續將其作為字符串使用?

我嘗試使用JsonTextReader來讀取每一行,但是我不確定一旦找到符合條件的項目該如何檢索需要的值。

{
    "result": [
        {
            "request_item.sys_id": "db6e3306dbc3ef8c791a777a8c961986",
            "request_item.u_requested_for.sys_id": "8416ccb3dba9df8c1ddee3a84b961911",
            "request_item.u_requested_for.user_name": "H298956"
        },
        {
            "request_item.sys_id": "e5990f89db47ebc8bd663ebd7c96198f",
            "request_item.u_requested_for.sys_id": "878ce1d5dbcd0300cc78dd0b5e961987",
            "request_item.u_requested_for.user_name": "E092733"
        },
        {
            "request_item.sys_id": "87970c08db4be388791a777a8c9619ee",
            "request_item.u_requested_for.sys_id": "484a1cf5db5f83c04f6489584b961952",
            "request_item.u_requested_for.user_name": "H281111"
        }
    ]
}

在這種情況下,我要遍歷每個項目並尋找值“ H281111”。 找到該值后,我想提取“ request_item.u_requested_for.sys_id值”,在這種情況下為“ 484a1cf5db5f83c04f6489584b961952”。

根據您的要求,您可能需要比Michaël更快,更臟的解決方案。 如果此JSON字符串的內容在應用程序中的多個位置使用過,我敦促您按照他的建議編寫類並適當地反序列化。 您會很高興的。

但是,如果您只需要在一個地方從此JSON字符串中獲得一個值,那么它將起作用。

var jobj = JObject.Parse(json);
var user_name = "H281111";

var sys_id = jobj["result"]
    .Where(r => (String)r["request_item.u_requested_for.user_name"] == user_name)
    .Select(r => (String)r["request_item.u_requested_for.sys_id"])
    .FirstOrDefault();

Elphas Tori建議使用?[]空條件元素訪問 )運算符進行以下改進:

var sys_id2 = (string)jobj["result"]
    .FirstOrDefault(r =>(string)r["request_item.u_requested_for.user_name"] == user_name)
    ?["request_item.u_requested_for.sys_id"];

如果該LINQ代碼對您來說看起來像胡言亂語,則可以使用更常規的循環方法:

foreach (var r in jobj["result"])
{
    //  etc.
}

我認為您應該在該Json文件中有一個代表對象的類,將Json文件反序列化為您的類,然后使用LINQ在對象列表中找到所需的對象。

結果將是requestItem的數組

請求項目將包含以下字段:

  • sys_id
  • u_requested_for(類)

請求的將具有以下字段:

  • sys_id
  • 用戶名

您甚至可以幻想並使用其中包含sys_id的基類來節省一些時間。

您需要將此反序列化為POCO對象以對其進行迭代。 在這里,您可以找到如何實現它的示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM