簡體   English   中英

如何返回 JSONObject 列表作為 REST API 響應

[英]How to return a list of JSONObject as REST API response

我正在使用 Spring Boot 創建一個 REST API 並使用 org.json 來解析從另一個不同服務檢索到的數據。 從這項服務中,我得到 JSON 數據,格式如下

   {

"my_data":[
{
"user_data":{
"first_name":"FirstTest1",
            "last_name":"LastTest1",
            "age":"25"
}
},
{
"user_data":{
            "first_name":"FirstTest2",
            "last_name":"LastTest2",
            "age":"35"
            }
},{
"user_data":{
            "first_name":"FirstTest3",
            "last_name":"LastTest3",
            "age":"45"
            }
}
],
"count":10,
"is_safe":false
}

我必須將收到的數據轉換為以下 JSON

[
{
"user_data":{
"first_name":"FirstTest1",
            "last_name":"LastTest1",
            "age":"25"
}
},
{
"user_data":{
            "first_name":"FirstTest2",
            "last_name":"LastTest2",
            "age":"35"
            }
},{
"user_data":{
            "first_name":"FirstTest3",
            "last_name":"LastTest3",
            "age":"45"
            }
}
]

我知道我可以使用 POJO 到 map 數據並發送它(已經這樣做了)但這里的問題是從另一個服務接收的數據不是固定的,例如它可能有也可能沒有“first_name”或者可能有不同的字段比如“國家”。 所以,在這種情況下我不能事先制作 POJO。

在瀏覽了一些在線資源后,我做了一些更改,我的 POST Controller 方法如下所示。

@PostMapping(path = "/searchusersdata")
public RETURN_SOMETHING  searchUsersData(@RequestBody Map<String, String> searchData) {

List<JSONObject>  finalDataCollection = new ArrayList<JSONObject>();

//Making some REST API CALL TO GET 'response' using 'searchData'

String someResponse = response.getBody();

            JSONObject object = null;
            
            try {
                 object = new JSONObject(someResponse);
            } catch (JSONException  e) {
                e.printStackTrace();
            }
            
            String my_data= object.get("my_data").toString();           
            
            JSONArray  intermediateJA = null;
            
            intermediateJA = new JSONArray (my_data);
            
            for(int i = 0; i < intermediateJA.length(); i++) {
                
                JSONObject item = intermediateJA.getJSONObject(i);
                
                if (item.keySet().contains("user_data"))
                {
                    Object value = item.get("user_data");
                    finalDataCollection.add(new JSONObject(value));
                }
                
            }
            
            
            //WHAT TO RESTURN HERE
            }

現在,我不知道要返回什么野兔。 對於單個 JSONObject,我們可以使用 return new ResponseEntity<>(return_data.toMap(), HttpStatus.OK); 但對於我不知道的收藏。 如果我必須以完全不同的方式來做,我願意接受建議。 我也知道使用 gson 或 jackson 可能更容易,但我必須使用 org.json。

而不是列表,使用 JsonArray 並使用 ResponseEntity 返回它。

例子

        JSONArray jsonArray = new JSONArray();
        JSONObject jsonObject = new JSONObject();
        jsonArray.put(jsonObject);
        return new ResponseEntity( jsonArray.toString(), HttpStatus.OK);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM