从Java中的JSON字符串中只检索一个字段

时间:2017-03-27 19:37:49

标签: java json object

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

aws dynamodb scan --table-name test --select "COUNT" --filter-expression "score = :s" | "score = :s1" --expression-attribute-values '{ ":s": { "N": "1" }, ":s1": { "N": "40" } }' --limit 100

我使用以下库

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

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

3 个答案:

答案 0 :(得分:3)

所以如果这是你的输入:

{
    "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

答案 1 :(得分:1)

另一种选择是使用jsonpath

使用与Lorant相同的Json blob:

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

您将使用以下表达式。

    $.data.email_address

或者如果它是一个数组,只需。

    $.users.[data].email_address

online tool可以用来试验和学习语法,但如果你知道xpath,它应该已经有点熟悉了。

答案 2 :(得分:0)

import org.json.JSONObject;


JSONObject json = new JSONObject(record);
json.getString("fieldName"));