使用JAVA中的相同变量处理JSON响应(字符串或数组)

时间:2019-03-04 06:24:31

标签: java json rest

我从JSON获得了两种格式的字符串和数组响应,因此由于我不确定哪种格式,所以无法处理它

有什么方法可以使用Java处理字符串和数组类型的响应

请提前告知我

2 个答案:

答案 0 :(得分:0)

我认为您可以在这种情况下使用try catch异常。 首先,尝试将响应视为String。如果发生错误,则捕获错误并将响应视为Array。

答案 1 :(得分:0)

只需检查JSON message部分的数据类型并相应地使用它即可。

查看此示例。

package test;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class jsonDeco {

    public static void main(String[] args) throws JSONException {
        // TODO Auto-generated method stub
        JSONObject a = new JSONObject("{ \"status_code\": 2002, \"sub_status_code\": 2002,"
                + " \"message\": \"Service Invoke Create Step2 Success\"} ");
        JSONObject b = new JSONObject("{ \"status_code\": 7000, \"sub_status_code\": 7001,"
                + " \"message\": [ \"Step No: Step 2: Line No: 92 Variable Name: lan-pool-ipv6-mask"
                + " Error Code: 7516 Error Detail: Lan Pool IPV6 network address is invalid Description: \" ]}");
        parseAORB(b);
    }

    public static void parseAORB(JSONObject input) throws JSONException
    {
        String code = input.getString("status_code");
        System.out.println(code);
        System.out.println(nameOf(input.get("message")));
        if(nameOf(input.get("message")).equals("String"))
        {
            System.out.println("inside string");
            String message = input.getString("message");
            System.out.println("Message is : "+message);
        }
        else if (nameOf(input.get("message")).equals("JSONArray"))
        {
            JSONArray message = input.getJSONArray("message");
            System.out.println("inside jsonarray");
            System.out.println("Message is : "+message.getString(0).toString());
        }   
    }

    private static String nameOf(Object o) {
        return o.getClass().getSimpleName();
    }
}

您可以传递变量ab进行测试。

P.S。在注释中,两个示例都是错误的。在第一个示例中,末尾有一个逗号,,在第二个示例中,您没有关闭大括号}