You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# JSON反序列化动态变量:解析供应商JSON访问value1遇阻

帮你搞定JSON嵌套结构的value1访问问题

嘿,刚接触JSON的时候,这种多层嵌套的结构确实容易让人摸不着头脑~我先帮你拆解一下你拿到的这个数据结构,再给你几种实用的访问value1的方法。

首先先把你的示例JSON整理成更清晰的格式(方便看结构):

{
  "Nodes": ["ID1", "ID2", "ID3", "IDxx"],
  "Results": {
    "ID1": {
      "ID2": {
        "value1": "example1",
        "value2": "exempleHexa"
      },
      "ID3": {
        "value1": "example2",
        "value2": "exempleHexa"
      }
    },
    "ID3": {
      "ID1": {
        "value1": "example3",
        "value2": "exempleHexa"
      },
      "ID2": {
        "value1": "example4",
        "value2": "exempleHexa"
      },
      "ID3": {
        "value1": "example5",
        "value2": "exempleHexa"
      }
    }
  }
}

结构拆解

  • 最外层是一个对象,包含两个核心键:
    • Nodes:是一个数组,存储了所有节点的ID;
    • Results:是一个嵌套对象,第一层键是「源节点ID」,第二层键是「目标节点ID」,每个目标节点下就是你要找的value1和value2。

方法1:直接访问特定的value1

如果你明确知道要找的是哪组节点的value1,可以通过「层级键名」直接定位,以Python为例(新手友好,语法直观):

import json

# 把JSON字符串解析成Python字典
json_str = '''{ "Nodes": [ "ID1", "ID2", "ID3", "IDxx" ], "Results": { "ID1": { "ID2": { "value1": "example1", "value2": "exempleHexa" }, "ID3": { "value1": "example2", "value2": "exempleHexa" } }, "ID3": { "ID1": { "value1": "example3", "value2": "exempleHexa" }, "ID2": { "value1": "example4", "value2": "exempleHexa" }, "ID3": { "value1": "example5", "value2": "exempleHexa" } } } }'''
data = json.loads(json_str)

# 比如要取ID1 -> ID2的value1
target_value = data["Results"]["ID1"]["ID2"]["value1"]
print(target_value)  # 输出: example1

# 再比如取ID3 -> ID3的value1
another_value = data["Results"]["ID3"]["ID3"]["value1"]
print(another_value)  # 输出: example5

方法2:遍历所有value1

如果你需要批量获取所有节点组合的value1,可以用嵌套循环遍历整个Results结构:

# 遍历所有源节点
for source_id, target_dict in data["Results"].items():
    # 遍历当前源节点下的所有目标节点
    for target_id, value_dict in target_dict.items():
        print(f"[{source_id} -> {target_id}] 的value1: {value_dict['value1']}")

运行后会输出所有value1的内容:

[ID1 -> ID2] 的value1: example1
[ID1 -> ID3] 的value1: example2
[ID3 -> ID1] 的value1: example3
[ID3 -> ID2] 的value1: example4
[ID3 -> ID3] 的value1: example5

小提示:避免键不存在报错

如果不确定某个节点ID是否存在,可以用字典的get()方法,这样即使键不存在也不会崩溃,还能设置默认值:

# 比如不确定IDxx是否存在,用get()安全访问
safe_value = data.get("Results", {}).get("IDxx", {}).get("ID1", {}).get("value1", "未找到该值")
print(safe_value)  # 输出: 未找到该值

内容的提问来源于stack exchange,提问作者cdufour

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:31:17