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

调用JSONObject.getString("Value")从JSON字符串中无法取值求助

问题分析与解决方案

首先得说清楚,你调用JSONObject.getString("Value")拿不到结果,核心原因有两个:

  • 你的JSON最外层是数组结构(用[]包裹),不是单个JSONObject,直接按对象解析肯定找不到对应内容;
  • 你的JSON数据里根本没有名为"Value"的字段,自然调用这个方法返回不了任何结果。

第一步:先理清你的JSON结构

先把你给出的JSON整理成更清晰的格式(方便看层级):

[
  {
    "$id": "1",
    "Blocks": [
      {
        "$id": "2",
        "Thing": { "$ref": "1" },
        "Id": 70020,
        "Index": 6,
        "PreviousHash": "12BF3BAA7E8B4055D0FD7070FB53B217EE2F427E52B7BBE8F7434194E1C04B",
        "Timestamp": "2018-03-30T17:13:41.99",
        "Hash": "676F1147C73964A1125F374EE9DA58469B25C67F1A70C8DCBC2B8B7695E7416",
        "Status": "Valid",
        "ThingId": 6021
      }
    ],
    "Id": 6021,
    "Created": "2018-01-01T00:00:00",
    "Issuer": "Islamic University",
    "Program": "Elecrical Eng",
    "DateAwarded": "2000-01-01T00:00:00..."
  }
]

可以看到:

  1. 最外层是数组,里面包含1个根对象;
  2. 根对象里有Issuer、Program、Blocks等字段;
  3. Blocks又是一个数组,里面存着具体的区块数据。

第二步:正确获取字段的代码示例

假设你想用Java的org.json库获取Issuer或者区块的Hash值,代码可以这么写:

// 假设你的原始JSON字符串是jsonStr
String jsonStr = "[ { \"$id\": \"1\", \"Blocks\": [ { \"$id\": \"2\", \"Thing\": { \"$ref\": \"1\" }, \"Id\": 70020, \"Index\": 6, \"PreviousHash\": \"12BF3BAA7E8B4055D0FD7070FB53B217EE2F427E52B7BBE8F7434194E1C04B\", \"Timestamp\": \"2018-03-30T17:13:41.99\", \"Hash\": \"676F1147C73964A1125F374EE9DA58469B25C67F1A70C8DCBC2B8B7695E7416\", \"Status\": \"Valid\", \"ThingId\": 6021 } ], \"Id\": 6021, \"Created\": \"2018-01-01T00:00:00\", \"Issuer\": \"Islamic University\", \"Program\": \"Elecrical Eng\", \"DateAwarded\": \"2000-01-01T00:00:00\" } ]";

// 1. 先把JSON字符串解析成JSONArray(因为最外层是数组)
JSONArray jsonArray = new JSONArray(jsonStr);

// 2. 取出数组里的第一个根对象(你的数组只有1个元素)
JSONObject rootObj = jsonArray.getJSONObject(0);

// 3. 获取根对象里的Issuer字段
String issuer = rootObj.getString("Issuer");
System.out.println("发证人:" + issuer); // 输出 Islamic University

// 4. 如果要获取Blocks数组里的区块Hash值
JSONArray blocksArray = rootObj.getJSONArray("Blocks");
JSONObject blockObj = blocksArray.getJSONObject(0);
String blockHash = blockObj.getString("Hash");
System.out.println("区块哈希:" + blockHash);

关键注意点

  • 字段名要严格匹配:JSON是大小写敏感的,比如Program不能写成program;
  • 如果你确实需要获取"Value"字段,得先确认数据源是否正确——要么是字段名拼写错误(比如是不是value小写),要么是数据源本身就没有这个字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:06:58