C#通过ID访问JSON内容

本文关键字:JSON 内容 访问 ID 通过 | 更新日期: 2023-09-27 18:24:54

所以我需要解析C#项目中的JSON字符串。我从方法调用中获得JSON作为响应,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"、"name"之类的成员。。。所以我尝试了

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();

因为我不知道下一个JSON字符串中的值"10"是什么。那么,我如何通过Id或其他东西来获得元素值呢?

C#通过ID访问JSON内容

如果您事先不知道10的值,那么很明显您无法使用此键访问其内容(在您的示例中,这将是访问其他属性的键)。如果这个对象总是有一个顶级属性,那么你的代码就很好了:

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

在尝试访问jo阵列之前,添加了一些防御检查,以确保其至少具有一个属性

另一方面,如果位于您所了解的实体的某个属性内,则可以随意循环jo变量的所有顶级属性,检查子属性中是否存在您所了解键的值,直到找到所需的记录。

所以我自己得出了一个结论:如果JSON只包含一个top 1级别的元素(在我的例子中是"10"),那么我可以访问这个元素中的属性,就像:

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

我仍然不知道如何访问包含多个顶级1元素的JSON。但我会提出一个不同的问题。