【问题标题】:Handling JSON response which is String or Array using same variable in JAVA使用 JAVA 中的相同变量处理字符串或数组的 JSON 响应
【发布时间】:2019-03-04 06:24:30
【问题描述】:

我从 JSON 收到两种格式的字符串和数组的响应,所以我无法处理它,因为我不确定哪种格式会是

有没有办法使用java处理字符串和数组类型的响应

请提前告知,谢谢

【问题讨论】:

  • 你用的json库是什么?使用通用字段 getter(对象类型),例如 jackson lib stackoverflow.com/questions/26190851/…
  • 两种格式是什么意思?它是一个字符串后跟一个数组(在这种情况下它不会是 json?)它是一个有两个字段的对象吗?
  • REST 保证实际上我正在为 api 做自动化,但我面临的问题是消息变量,它有时会保存字符串响应,有时会保存数组响应,当我想存储为字符串时,我得到错误不能转换字符串像这样进入数组
  • 您能否提供更多有关您的 JSON 响应的信息?
  • Ex1 : { "status_code": 2002, "sub_status_code": 2002, "message": "Service Invoke Create Step2 Success", } Example 2 : { "status_code": 7000, "sub_status_code": 7001, "message": [ "Step No: Step 2: Line No: 92 变量名: lan-pool-ipv6-mask 错误代码: 7516 Error Detail: Lan Pool IPV6 network address is invalid 描述: " ], 例1消息是字符串类型,在示例 2 中消息是数组类型如何在 java 中处理它

标签: java json rest


【解决方案1】:

我认为在这种情况下你可以使用 try catch 异常。 首先,尝试将响应视为字符串。如果发生错误,只需捕获错误并将响应视为数组。

【讨论】:

    【解决方案2】:

    只需检查 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 进行测试。

    附:在评论中,这两个例子都是错误的。在第一个示例中,末尾有一个逗号,,在第二个示例中,您没有关闭大括号}

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-24
      • 1970-01-01
      • 2017-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-03
      • 1970-01-01
      相关资源
      最近更新 更多