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

如何在Java中将JSON字符串拆分为两个JSON对象,java,json,org.json,Java,Json,Org.json,我有一个JSON对象,如下所示: { "token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9", "user":{ "pk":17, "username":"user1", "email":"user1@gmail.com", "first_name":"", "last_name":"" } } 我试图从中获取两个JSON对象;令牌和用户。我尝试了两种不同的方法,但都失败

我有一个
JSON
对象,如下所示:

{  
   "token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9",
   "user":{  
      "pk":17,
      "username":"user1",
      "email":"user1@gmail.com",
      "first_name":"",
      "last_name":""
   }
}
我试图从中获取两个
JSON
对象;令牌和用户。我尝试了两种不同的方法,但都失败了:

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

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

任何人都可以告诉我如何将其拆分为两个
JSON
对象吗?

您可以使用

var obj = JSON.parse(jsonString);
您可以通过简单地寻址来过滤json对象的子部分

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

您可以这样拆分它:

// 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"}}

更安全/更干净的方法是创建一个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;


我最近遇到了同样的情况,我使用了以下代码:

    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中

您还可以通过以下方式验证输出:

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

你用哪种语言?JavaScript还是Java?它在Android Studiolooks中的Java格式,如append,在tokenObject中没有解析。append@NabatFarsi,您使用什么库,在哪个版本中?如果您不使用Android studio中的内置库@NabatFarsi,我猜它是
org.json
。你能至少显示
JSONObject
JSONArray
类的导入吗?你是对的,它是org.Json,所以可能是不同的版本,我会进一步研究它。我不认为它是Java?是吗?不是。这将是解决方案的Javascript方面,而不是您想要的
token::eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
user:{"last_name":"","pk":17,"first_name":"","email":"user1@gmail.com","username":"user1"}