在不知道属性名称和属性数量的情况下处理json对象

时间:2018-05-25 08:59:59

标签: java json spring-boot

我尝试使用以下示例处理请求:

"type" : "NEWS",
"content" : {
    "title" : "Test Message",
    "message" : "This is a message",
    "buttonCaption" : "Click me"
}

或者也许:

"type" : "NEWS",
"content" : {
    "title" : "Test Message",
    "message" : "This is a message",
    "buttonCaption" : "Click me",
    "anotherField" : "values"
}

有时可能:

"type" : "NEWS",
"content" : {
    "name" : "Test Message",
    "anotherProperties" : "This is a message",
    "ohMyGodAnotherFields" : "Click me"
}

所以我无法创建特定的对象。 如何在Spring控制器中处理它?<​​/ p>

2 个答案:

答案 0 :(得分:0)

您可以在资源类中使用JsonNode,如:

public class Foo {
    private String type;
    private JsonNode content;
    // ...
}

并在控制器中接受@RequestBody

@PostMapping
public ResponseEntity<Foo> foo(@RequestBody Foo foo){
   // do something with your foo...
}

您可以阅读更多aboot JsonNode here.

答案 1 :(得分:0)

您必须使用java.util.Iterator获取密钥。

JSONObject jsonObj = new JSONObject(JSONString);
Iterator keys = jsonObj.keys();
while (keys.hasNext()) {
     String keyStr = keys.next().toString();
     String value = jsonObj.getStrin(keyStr);
}

或者你可以试试这个:

JSONObject jsonObj = new JSONObject(JSONString);
if (jsonObj.has("key")) {
    String value = jsonObj.getString("key");
}