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

p0t*_*tta 2 java json object

有没有办法仅将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"));    
Run Code Online (Sandbox Code Playgroud)

我正在使用以下库

import org.json.simple.JSONObject;
import org.json.simple.JSONArray;
import org.json.simple.parser.ParseException;
import org.json.simple.parser.JSONParser;
Run Code Online (Sandbox Code Playgroud)

从响应字符串分别来看,我只需要data.email_address。我找不到解决办法。

Lór*_*ber 5

因此,如果这是您的输入:

{
    "data": {
        "email_address": "example@example.com"
    }
}
Run Code Online (Sandbox Code Playgroud)

您首先需要将其设置为JSONObject

JSONObject object = (JSONObject) new JSONParser().parse(json);
Run Code Online (Sandbox Code Playgroud)

然后您可以得到data另一个JSONObject

JSONObject data = (JSONObject) object.get("data")
Run Code Online (Sandbox Code Playgroud)

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

String email = data.get("email_address").toString();
Run Code Online (Sandbox Code Playgroud)

如果您输入的是用户数组,例如:

{
  "users": [
    {
      "data": {
        "email_address": "example@example.com"
      }
    },
    {
      "data": {
        "email_address": "exapmle2@example2.com"
      }
    }
    ]
}
Run Code Online (Sandbox Code Playgroud)

您可以通过以下方式获得它:

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();
Run Code Online (Sandbox Code Playgroud)

首先将整个JSON解析为一个Object。然后users从该数组中获取一个名为的数组,从索引中获取0。从该Object中,获取data,然后email_address