如何将 JSON 字符串拆分为 Java 中的两个 JSON 对象
How to Split a JSON string to two JSON objects in Java
我有一个 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
对象吗?
您可以使用
解析 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;
和
ObjectMapper mapper = new ObjectMapper();
MyObject myObject = mapper.readValue(jsonString, MyObject.class);
String token = myObject.token;
User user = myObject.user;
...
我最近遇到了同样的情况,我使用了以下对我有用的代码:
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"}
是的。它是一个 JSON 字符串。
像这样使用
JSONParser jparse=new JSONParser();
JSONObject jObj=(JSONObject)jParse.parse(jsonString);
jObj 现在将包含 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
对象吗?
您可以使用
解析 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;
和
ObjectMapper mapper = new ObjectMapper();
MyObject myObject = mapper.readValue(jsonString, MyObject.class);
String token = myObject.token;
User user = myObject.user;
...
我最近遇到了同样的情况,我使用了以下对我有用的代码:
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"}
是的。它是一个 JSON 字符串。 像这样使用
JSONParser jparse=new JSONParser();
JSONObject jObj=(JSONObject)jParse.parse(jsonString);
jObj 现在将包含 json 个对象。