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

时间:2019-03-15 23:42:21

标签: java json org.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对象吗?

5 个答案:

答案 0 :(得分:1)

您可以使用以下方式解析json字符串

var obj = JSON.parse(jsonString);

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

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

答案 1 :(得分:0)

您可以按以下方式拆分它:

"SELECT Release_Name FROM Lucas_t_db WHERE Published_Time > SUBDATE( CURRENT_TIME, INTERVAL 90 MINUTE) AND Post_ID IS NOT NULL AND Post_status IS NULL

上面的代码显示:

AND Post_status IS NULL

答案 2 :(得分: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;
...

答案 3 :(得分: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"}

答案 4 :(得分:0)

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

Option Explicit

Public Sub rechnen_mod()
    Dim mp_y() As Variant
    Dim mp_r() As Variant
    Dim aud_y() As Variant
    Dim soc_r() As Variant
    Dim arrResult_P() As Variant
    Dim arrResult_Q() As Variant
    Dim iLastRow As Integer
    Dim iSizeArrays As Integer
    Dim iIndexSearch As Integer
    
    With ThisWorkbook.Worksheets("MRP score template")
        ' Find last row of table, replace it with fixed value if you prefer
        iLastRow = .UsedRange.Rows(.UsedRange.Rows.Count).Row
        
        ' Store data in arrays
        mp_y = .Range("M11", "M" & iLastRow).Value
        mp_r = .Range("N11", "N" & iLastRow).Value
        aud_y = .Range("P11", "P" & iLastRow).Value
        soc_r = .Range("Q11", "Q" & iLastRow).Value
        
        ' Calculate size of arrays
        iSizeArrays = UBound(mp_y) - LBound(mp_y) + 1
        
        ' ReDim result arrays according to iSizeArrays
        ReDim arrResult_P(1 To iSizeArrays)
        ReDim arrResult_Q(1 To iSizeArrays)
        
        ' Calculate result values
        For iIndexSearch = 1 To iSizeArrays
            arrResult_P(iIndexSearch) = mp_y(iIndexSearch, 1) * aud_y(iIndexSearch, 1)
            arrResult_Q(iIndexSearch) = mp_r(iIndexSearch, 1) * soc_r(iIndexSearch, 1)
        Next iIndexSearch
        
        ' Write results in the worksheet
        .Range("P11", "P" & iLastRow) = Application.WorksheetFunction.Transpose(arrResult_P)
        .Range("Q11", "Q" & iLastRow) = Application.WorksheetFunction.Transpose(arrResult_Q)
    End With
End Sub

jObj 现在将包含 json 对象。