2015-11-29 102 views
2

所以我需要從我的C#項目解析JSON字符串。 讓我的JSON從一個方法調用的響應和JSON看起來是這樣的:C#通過ID訪問JSON內容

{ 
    "10": { 
     "entity_id": "10", 
     "attribute_set_id": "4", 
     "type_id": "simple", 
     "sku": "convertor-touchscreen", 
     "name": "Convertor touchscreen", 
     "meta_title": null, 
     "meta_description": null, 
     "url_key": "convertor-touchscreen", 
     "custom_design": null, 
     "page_layout": null, 
     "options_container": "container1", 
     "country_of_manufacture": null, 
     "msrp_enabled": "2", 
     "msrp_display_actual_price_type": "4", 
     "gift_message_available": null, 
     "creareseo_discontinued": null, 
     "creareseo_discontinued_product": null, 
     "description": "Convertor touchscreen", 
     "short_description": "Convertor touchscreen", 
     "meta_keyword": null, 
     "custom_layout_update": null, 
     "price": "421.0000", 
     "special_price": "380.0000", 
     "weight": "0.1500", 
     "msrp": null, 
     "special_from_date": "2015-11-24 00:00:00", 
     "special_to_date": "2015-11-26 00:00:00", 
     "news_from_date": null, 
     "news_to_date": null, 
     "custom_design_from": null, 
     "custom_design_to": null, 
     "status": "1", 
     "visibility": "4", 
     "tax_class_id": "2", 
     "featured": "1" 
    } 
} 

所以我需要訪問的成員,如「ENTITY_ID」,「姓名」等...... 所以我嘗試

using Newtonsoft.Json.Linq; 
... 
// output is the above JSON string 
var jo = JObject.Parse(output); 
var id = jo[0]["entity_id"].ToString(); 

但顯然它不是做一個好辦法。 另外,我沒有控制權的第一部分

{ 
    "10": { 

所以我不能做

var id = jo["10"]["entity_id"].ToString(); 

,因爲我不知道該值「10」將在我的下一個JSON字符串的內容。 那麼如何通過Id或其他東西獲取元素值?

+0

你不知道你*知道什麼。在JSON中只會有一個實體嗎?你認爲什麼是對你所擁有的東西「不是一個好方法」? –

回答

2

如果您事先不知道10的值,很明顯您無法使用該鍵訪問其內容(在您的示例中,這將是訪問其他屬性的關鍵)。如果該對象將始終有1個頂級屬性,則你的代碼就好了:

var jo = JObject.Parse(output); 
var id = jo[0]["entity_id"].ToString(); 

增加了一些防禦性的檢查,該jo數組試圖訪問前至少一個屬性。

在另一方面,如果關鍵是,你瞭解它,然後隨意遍歷所有jo變量檢查子屬性值的頂級性能的實體的某些屬性裏面你知道的關鍵,直到你找到所需的記錄。

+0

我認爲你錯過了這一點。我無法訪問該房產,因爲我不知道「10」的價值。所以我不得不依靠身份證,但如果我嘗試這樣做,我會遇到一個錯誤。所以你上面寫的代碼與我在我的問題中作爲非工作代碼的示例相同:error:'訪問的JObject值的鍵值無效:0。期望的對象屬性名稱。' – user1137313

+0

我來到了一個可行的解決方案,所以我會改變這個問題:如果有多個頂級1級元素,我怎麼能訪問JSON,而我不知道它們? – user1137313

+0

如果有多個頂級元素,並且您不知道它們,並且您不知道要訪問什麼,那麼您希望能夠實現的究竟是什麼?你當然可以遍歷所有的頂級元素,但是如果你不知道你在找什麼機會找到它接近於零。 –

0

於是,我來到了一個conclussion我自己: 如果JSON中包含了(在我的情況下,「10」)只有一個最高的1級元素,那麼我可以訪問此元素中的屬性,就像:

var descr = output.description; 
var entid = output.entity_id; 
... and so on 

我仍然不知道如何訪問包含多個頂級1元素的JSON。但我會提出一個不同的問題。