Java 如何从json数组中提取值

Java 如何从json数组中提取值,java,json,Java,Json,我正在调用一个Api,该Api将返回此响应 [ { "message": { "type": "String", "value": "Msg1,Msg2,Msg3,Msg4", "valueInfo": {} }, "Decision": { "type": "Boolean", "value": false,

我正在调用一个Api,该Api将返回此响应

[
    {
        "message": {
            "type": "String",
            "value": "Msg1,Msg2,Msg3,Msg4",
            "valueInfo": {}
        },
        "Decision": {
            "type": "Boolean",
            "value": false,
            "valueInfo": {}
        }
    },
    {
        "message": {
            "type": "String",
            "value": "[Msg2, Msg3,Msg5]",
            "valueInfo": {}
        },
        "Decision": {
            "type": "Boolean",
            "value": false,
            "valueInfo": {}
        }
    }
]
现在我必须从回应中一个接一个地提取信息和决定,我如何才能做到这一点。
一个对象中不可能有多条消息。

假设您可以访问jquery,并且需要独立数组中的消息来处理

$(a).map(函数(i,项){return{item.message.value}).get();

尝试以下操作:

String res = "[\n" +
        "    {\n" +
        "        \"message\": {\n" +
        "            \"type\": \"String\",\n" +
        "            \"value\": \"Msg1,Msg2,Msg3,Msg4\",\n" +
        "            \"valueInfo\": {}\n" +
        "        },\n" +
        "        \"Decision\": {\n" +
        "            \"type\": \"Boolean\",\n" +
        "            \"value\": false,\n" +
        "            \"valueInfo\": {}\n" +
        "        }\n" +
        "    },\n" +
        "    {\n" +
        "        \"message\": {\n" +
        "            \"type\": \"String\",\n" +
        "            \"value\": \"[Msg2, Msg3,Msg5]\",\n" +
        "            \"valueInfo\": {}\n" +
        "        },\n" +
        "        \"Decision\": {\n" +
        "            \"type\": \"Boolean\",\n" +
        "            \"value\": false,\n" +
        "            \"valueInfo\": {}\n" +
        "        }\n" +
        "    }\n" +
        "]";

try {
    JSONArray jsonArray = new JSONArray(res);

    JSONObject[] messages = new JSONObject[jsonArray.length()];
    JSONObject[] Decision = new JSONObject[jsonArray.length()];


    for(int i =0; i<jsonArray.length(); i++){
        messages[i] = ((JSONObject) (jsonArray.get(i))).getJSONObject("message");
        Decision[i] = ((JSONObject) (jsonArray.get(i))).getJSONObject("Decision");


    }
} catch (JSONException e) {
    e.printStackTrace();
}
String res=“[\n”+
“{\n”+
“\”消息\“:{\n”+
“\”类型\“:\”字符串\“,\n”+
“值”:“Msg1、Msg2、Msg3、Msg4\,\n”+
“\“valueInfo\”:{}\n”+
},\n+
“\”决定\“:{\n”+
“\”类型\“:\”布尔\“,\n”+
“值”:false,\n+
“\“valueInfo\”:{}\n”+
“}\n”+
},\n+
“{\n”+
“\”消息\“:{\n”+
“\”类型\“:\”字符串\“,\n”+
“\“值\:\”[Msg2、Msg3、Msg5]\,\n”+
“\“valueInfo\”:{}\n”+
},\n+
“\”决定\“:{\n”+
“\”类型\“:\”布尔\“,\n”+
“值”:false,\n+
“\“valueInfo\”:{}\n”+
“}\n”+
“}\n”+
"]";
试一试{
JSONArray JSONArray=新JSONArray(res);
JSONObject[]messages=新的JSONObject[jsonArray.length()];
JSONObject[]Decision=newJSONObject[jsonArray.length()];

对于(int i=0;i而言,
消息
中的
值的类型不确定。有时它是
xxx,xxx,xxx
,有时它是
[xxx,xxx,xxx]
。因此您可能需要它

public static void main(String[] args) {
    String json = "[\n" +
            "    {\n" +
            "        \"message\": {\n" +
            "            \"type\": \"String\",\n" +
            "            \"value\": \"Msg1,Msg2,Msg3,Msg4\",\n" +
            "            \"valueInfo\": {}\n" +
            "        },\n" +
            "        \"Decision\": {\n" +
            "            \"type\": \"Boolean\",\n" +
            "            \"value\": false,\n" +
            "            \"valueInfo\": {}\n" +
            "        }\n" +
            "    },\n" +
            "    {\n" +
            "        \"message\": {\n" +
            "            \"type\": \"String\",\n" +
            "            \"value\": \"[Msg2, Msg3,Msg5]\",\n" +
            "            \"valueInfo\": {}\n" +
            "        },\n" +
            "        \"Decision\": {\n" +
            "            \"type\": \"Boolean\",\n" +
            "            \"value\": false,\n" +
            "            \"valueInfo\": {}\n" +
            "        }\n" +
            "    }\n" +
            "]";


    List<MessageDecision> list = new Gson().fromJson(json,
            new TypeToken<List<MessageDecision>>(){}.getType());

    for (MessageDecision data: list){
        System.out.println(data.message.getValueList());
    }

}

class MessageDecision {
    public Message message;
    public Decision Decision;

    class Message {
        String type;
        String value;

        //
        List<String> valueList;


        public List<String> getValueList() {
            if (type.equals("String")) {
                if (value!=null) {
                    if (value.startsWith("[")) {

                        valueList = new Gson().fromJson(value, new TypeToken<List<String>>() {
                        }.getType());
                    } else {
                        String tempValues[] = value.split(",");
                        valueList = Arrays.asList(tempValues);
                    }
                }
                return valueList;
            }
            return null;
        }
    }

    class Decision {
        String type;
        Object value;
    }
}
publicstaticvoidmain(字符串[]args){
字符串json=“[\n”+
“{\n”+
“\”消息\“:{\n”+
“\”类型\“:\”字符串\“,\n”+
“值”:“Msg1、Msg2、Msg3、Msg4\,\n”+
“\“valueInfo\”:{}\n”+
},\n+
“\”决定\“:{\n”+
“\”类型\“:\”布尔\“,\n”+
“值”:false,\n+
“\“valueInfo\”:{}\n”+
“}\n”+
},\n+
“{\n”+
“\”消息\“:{\n”+
“\”类型\“:\”字符串\“,\n”+
“\“值\:\”[Msg2、Msg3、Msg5]\,\n”+
“\“valueInfo\”:{}\n”+
},\n+
“\”决定\“:{\n”+
“\”类型\“:\”布尔\“,\n”+
“值”:false,\n+
“\“valueInfo\”:{}\n”+
“}\n”+
“}\n”+
"]";
List List=new Gson().fromJson(json,
新的TypeToken(){}.getType());
用于(MessageDecision数据:列表){
System.out.println(data.message.getValueList());
}
}
类消息决策{
公共信息;
公共决策;
类消息{
字符串类型;
字符串值;
//
价值清单;
公共列表getValueList(){
if(type.equals(“字符串”)){
if(值!=null){
if(value.startsWith(“[”)){
valueList=new Gson().fromJson(值,new TypeToken()){
}.getType());
}否则{
字符串tempValues[]=value.split(“,”);
valueList=Arrays.asList(tempValues);
}
}
返回价值清单;
}
返回null;
}
}
阶级决定{
字符串类型;
目标价值;
}
}

read使用JSON时使用哪种编程语言或框架?@HaktanEnesBiçerJava@IntelliJAmiya我可以轻松访问对象数组,但我不知道如何访问对象的多个值msg@Ruzihm你能不能建议我在这个问题中补充什么信息来说明问题。