RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 698459
Accepted
Polyakov Sergey
Polyakov Sergey
Asked:2020-07-27 19:01:37 +0000 UTC2020-07-27 19:01:37 +0000 UTC 2020-07-27 19:01:37 +0000 UTC

如果只有键已知,从 JSON 中获取值

  • 772

有json:

{
        "resourceType": "Parameters",
        "parameter": [{
            "name": "return",
            "resource": {
                "resourceType": "ValueSet",
                "id": "f0ff2153-d170-49c0-9e8d-558ca41b9105",
                "meta": {
                    "versionId": "1c0d1a38-e6bc-4a11-bb54-c624fc542898",
                    "lastUpdated": "2015-07-20T13:47:23.15+03:00"
                },
                "url": "urn:oid:1.2.643.2.69.1.1.1.7",
                "version": "1",
                "name": "Классификатор категорий льгот",
                "status": "active",
                "experimental": true,
                "publisher": "bla",
                "contact": [{
                    "telecom": [{
                        "system": "email",
                        "value": "support@bla.ru"
                    }]
                }],
                "compose": {
                    "import": [
                        "1.2.643.2.69.1.1.1.7_INNER"
                    ]
                },
                "expansion": {
                    "timestamp": "07/27/2017 13:19:12",
                    "parameter": [{
                        "name": "total",
                        "valueString": "69"
                    }],
                    "contains": [{
                            "code": "10",
                            "display": "Инвалиды войны"
                        },
                        {
                            "code": "50",
                            "display": "Лица, награжденные знаком \"Жители блокадного Ленинграда\""
                        },
                        {
                            "code": "60",
                            "display": "Члены семей погибших инвалидов и участников ВОВ, ветеранов боевых действий"
                        },
                        {
                            "code": "61",
                            "display": "Члены семей погибших в ВОВ из числа л/с групп самозащиты объектов и команд ПВО, работников госпиталей Ленинграда"
                        },
                        {
                            "code": "62",
                            "display": "Члены семей погибших в/с, сотр. МВД, противопож. службы, погибших при исполнении обязанностей"
                        }...

问题是我只需要获取“显示”的所有值。但假设会出现不同格式的不同 json,因此需要提取某些值。只有密钥会被知道。

我试图做这样的事情:

public object ValueFromJSON(JObject json, string columnSourceName)
{            
    var v = json[columnSourceName].AsEnumerable();
}

那里columnSourceName有一个键叫display,但是什么也没有出来。把它扔进 eksepshn。如何通过key得到一个值数组?

c#
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. Best Answer
    VladD
    2020-07-28T03:50:57Z2020-07-28T03:50:57Z

    如果您已经在使用JToken,那么为什么不使用 LINQ?

    var root = JObject.Parse(File.ReadAllText(path));
    var displayValues =
            root.DescendantsAndSelf()
                .OfType<JProperty>()
                .Where(p => p.Name == "display")
                .Select(p => p.Value);
    foreach (var v in displayValues)
        Console.WriteLine(v);
    

    在你的例子中,这给了我:

    战争中的残疾人被授予“
    被围困的列宁格勒 居民”标志
    的人死亡的残疾人和伟大卫国战争参与者的家庭成员,军事 行动的退伍军人。总务省柜台 服务在执行任务中丧生


    对于您的 JSON,这可能并不重要,但一般来说,这样的过滤意味着过滤后的值不仅可以是字符串或数字等原始值,还可以是更重要的东西,例如数组或数组目的。这可以通过附加条件消除:

    .Where(p.Value.Type != JTokenType.Object && p.Value.Type != JTokenType.Array)
    

    如果获得简单值而不是复合值对您很重要。感谢@sp7 在评论中指出这一点。

    • 6
  2. Нетерпеливый игуан
    2020-07-27T21:12:57Z2020-07-27T21:12:57Z

    看一个递归遍历任意对象的所有属性的例子:

    static void Main(string[] args)
    {
        Container c = new Container();
        PrintProperties(c);
    }
    public static void PrintProperties(object obj)
    {
        PrintProperties(obj, 0);
    }
    public static void PrintProperties(object obj, int indent)
    {
    
        if (obj == null) return;
        string indentString = new string(' ', indent);
        Type objType = obj.GetType();
        PropertyInfo[] properties = objType.GetProperties();
        foreach (PropertyInfo property in properties)
        {
            object propValue = property.GetValue(obj, null);
            if (property.PropertyType.Assembly == objType.Assembly)
            {
                Console.WriteLine("{0}{1}:", indentString, property.Name);
    
                PrintProperties(propValue, indent + 2);
            }
            else
            {
                Console.WriteLine("{0}{1}: {2}", indentString, property.Name, propValue);
            }
        }
    }
    

    该代码将给定对象的所有属性的值显示到控制台。您只需要重做输出以按属性名称进行比较,如果相等,则将值存储在列表的某个线程中。

    原来的

    • 1

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    Python 3.6 - 安装 MySQL (Windows)

    • 1 个回答
  • Marko Smith

    C++ 编写程序“计算单个岛屿”。填充一个二维数组 12x12 0 和 1

    • 2 个回答
  • Marko Smith

    返回指针的函数

    • 1 个回答
  • Marko Smith

    我使用 django 管理面板添加图像,但它没有显示

    • 1 个回答
  • Marko Smith

    这些条目是什么意思,它们的完整等效项是什么样的

    • 2 个回答
  • Marko Smith

    浏览器仍然缓存文件数据

    • 1 个回答
  • Marko Smith

    在 Excel VBA 中激活工作表的问题

    • 3 个回答
  • Marko Smith

    为什么内置类型中包含复数而小数不包含?

    • 2 个回答
  • Marko Smith

    获得唯一途径

    • 3 个回答
  • Marko Smith

    告诉我一个像幻灯片一样创建滚动的库

    • 1 个回答
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Алексей Шиманский 如何以及通过什么方式来查找 Javascript 代码中的错误? 2020-08-03 00:21:37 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5