【发布时间】:2020-12-19 23:56:12
【问题描述】:
我正在使用 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 来映射数据并发送它(已经这样做了)但是这里的问题是从另一个服务接收到的数据不是固定的,例如它可能有也可能没有“first_name”,或者可能有不同的字段,如“country”。所以,在这种情况下,我不能预先制作 POJO。
在浏览了一些在线资源后,我做了一些更改,我的 POST 控制器方法如下所示。
@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。
【问题讨论】:
-
前两个 JSON 字符串都不是有效的 JSON。您可以使用 this one 等验证器查看错误。
-
@andrewjames 用有效的 JSON 更新了问题
标签: java spring-boot org.json