【问题标题】:Retrieve just one field from JSON string in Java从 Java 中的 JSON 字符串中仅检索一个字段
【发布时间】:2017-03-27 19:37:48
【问题描述】:

有没有办法只从 JSON 字符串中提取一个字段?我的代码如下:

Object obj = parser.parse(resp);
System.out.println(obj);
JSONArray array = new JSONArray();
array.add(obj);

JSONObject obj2 = (JSONObject)array.get(0); //Getting NPE here
//Object obj3 = obj2.get("data");

System.out.println("Data: " + obj2.get("data"));
//System.out.println("Email: " + obj3.get("email_address"));    

我正在使用以下库

import org.json.simple.JSONObject;
import org.json.simple.JSONArray;
import org.json.simple.parser.ParseException;
import org.json.simple.parser.JSONParser;

从响应字符串 resp,我只需要 data.email_address。我找不到办法。

【问题讨论】:

  • 您的答案适用于 Javascript 而不是 Java。我正在研究如何在 Java 中做到这一点。
  • 有 Java 的 JS 库,但这可能不是最优雅的方式。
  • 什么是好的库?我正在使用一个。问题是,我使用过的所有库都让我想要强烈键入对象,但响应返回大约 100 个不同的元素,我只需要一个,所以我不确定最好的方法是什么。
  • 我只知道纳肖恩...

标签: java json object


【解决方案1】:

如果这是您的输入:

{
    "data": {
        "email_address": "example@example.com"
    }
}

您首先需要将其设为JSONObject

JSONObject object = (JSONObject) new JSONParser().parse(json);

然后你可以得到data,另一个JSONObject

JSONObject data = (JSONObject) object.get("data")

从您的data 对象中,您可以获得email_address

String email = data.get("email_address").toString();

如果你的输入是一个用户数组,像这样:

{
  "users": [
    {
      "data": {
        "email_address": "example@example.com"
      }
    },
    {
      "data": {
        "email_address": "exapmle2@example2.com"
      }
    }
    ]
}

你可以用同样的方法得到它:

JSONObject object = (JSONObject) new JSONParser().parse(json);
JSONArray users = (JSONArray) object.get("users");
JSONObject user0 = (JSONObject) users.get(0);
JSONObject user0data = (JSONObject) user0.get("data");
String email = user0data.get("email_address").toString();

首先将整个 JSON 解析为一个 Object。然后得到一个名为users的数组,从那个数组中,得到索引0。从那个Object中,得到data,然后是email_address

【讨论】:

  • 我的回复太长了,所以我更新了主帖的详细信息。感谢您的出色回答,我相信我已经接近了。
  • 感谢您对不同场景的非常彻底的回答!
  • 有'.' (点)符号?像 object.get("data.email_address")?
【解决方案2】:

另一个选项是使用jsonpath

使用与 Lorant 相同的 Json blob:

    {
        "data": {
            "email_address": "example@example.com"
        }
    }

您将使用以下表达式。

    $.data.email_address

或者如果它是一个数组,简单地说。

    $.users.[data].email_address

online tool 可用于实验和学习语法,但如果您了解 xpath,它应该已经有些熟悉了。

【讨论】:

    【解决方案3】:
    import org.json.JSONObject;
    
    
    JSONObject json = new JSONObject(record);
    json.getString("fieldName"));
    

    【讨论】:

    • 返回与给定键关联的值,而不是像 OP 请求的字段。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-22
    • 2019-07-18
    • 1970-01-01
    • 1970-01-01
    • 2015-10-16
    • 2016-02-06
    • 1970-01-01
    相关资源
    最近更新 更多