2015-11-29 65 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。但我会提出一个不同的问题。