如何在Java中将一个JSON字符串拆分为两个JSON对象

4

我有一个以下的JSON对象:

{  
   "token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9",
   "user":{  
      "pk":17,
      "username":"user1",
      "email":"user1@gmail.com",
      "first_name":"",
      "last_name":""
   }
}

我正在尝试从中获取两个JSON对象; token和user。我已经尝试了两种不同的方法,但都失败了:

//response.body().string() is the above json object
JSONArray jsonArray = new JSONArray(response.body().string());

jsonObjectRoot = new JSONObject(response.body().string());

请问如何将这个JSON对象拆分成两个?


你在用哪种语言?JavaScript还是Java? - Robert
它是在Android Studio中使用Java编写的。 - Nabat Farsi
5个回答

0

是的,这是一个JSON字符串。 像这样使用

JSONParser jparse=new JSONParser();
JSONObject jObj=(JSONObject)jParse.parse(jsonString);

jObj 现在将包含 JSON 对象。


0

您可以使用以下方法解析JSON字符串:

var obj = JSON.parse(jsonString);

你可以通过简单地寻址来过滤JSON对象的子部分

var token = obj.token;
var user = obj.user;

1
我不认为这是Java?是吗? - Nabat Farsi
不是这样的。这将是解决方案的Javascript部分,这不是你要找的。;) - Robert

0
你可以这样分割它:
// source object
JSONObject sourceObject = new JSONObject(sourceJson);

String tokenKey = "token";
// create new object for token
JSONObject tokenObject = new JSONObject();

// transplant token to new object
tokenObject.append(tokenKey, sourceObject.remove(tokenKey));
// if append method does not exist use put
// tokenObject.put(tokenKey, sourceObject.remove(tokenKey));

System.out.println("Token object => " + tokenObject);
System.out.println("User object => " + sourceObject);

上面的代码输出:
Token object => {"token":["eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9"]}
User object => {"user":{"last_name":"","pk":17,"first_name":"","email":"user1@gmail.com","username":"user1"}}

似乎tokenObject.append无法解析。 - Nabat Farsi
@NabatFarsi,你使用哪个库以及它的哪个版本?难道你不使用org.json吗? - Michał Ziober
它是Android Studio中的内置库。 - Nabat Farsi
@NabatFarsi,我猜是org.json。你能至少展示一下JSONObjectJSONArray类的导入吗? - Michał Ziober
你是对的,它是 org.Json,很可能是不同的版本,我会进一步查看。 - Nabat Farsi
@NabatFarsi,在这种情况下,您应该使用put方法:tokenObject.put(tokenKey, sourceObject.remove(tokenKey));。请查看更新的答案。 - Michał Ziober

0

更安全/更干净的方法是创建一个POJO,并使用Jackson将您的JSON反序列化为它。您的POJO:

public class MyObject {
    String token;
    User user;

    static class User {
        int pk;
        String username;
        String email;
        String first_name;
        String last_name;
    }
}

然后,当您想要反序列化时:

import com.fasterxml.jackson.databind.ObjectMapper;

并且

ObjectMapper mapper = new ObjectMapper();
MyObject myObject = mapper.readValue(jsonString, MyObject.class);
String token = myObject.token;
User user = myObject.user;
...

0

我最近遇到了相同的情况,我使用了下面的代码,它对我起作用:

    JSONObject jo1 = new JSONObject(output);

    JSONObject tokenObject = new JSONObject();
    tokenObject.put("token", jo1.get("token"));
    JSONObject userObject = new JSONObject();
    userObject.put("user", jo1.get("user"));

在这里,我正在创建一个新的空JSONObject,然后将原始对象中检索到的对象放入新创建的JSONObject中。

您还可以通过sysout验证输出:

    System.out.println("token:" + tokenObject.get("token"));
    System.out.println("user:" + userObject.get("user"));

我的输出结果:

token::eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
user:{"last_name":"","pk":17,"first_name":"","email":"user1@gmail.com","username":"user1"}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接