为了账号安全,请及时绑定邮箱和手机立即绑定

当响应不包含头信息时如何解析json响应

当响应不包含头信息时如何解析json响应

MM们 2022-11-30 13:17:10
我正在尝试解析 json 响应,以便我可以从对象中获取元素,出现以下错误 A JSONObject text must begin with '{' at 1 [character 2 line 1]public static  String parseJsonResponse(String json){    String uId ="";    try {         JSONObject jsonObj = new JSONObject(json);         // String fname = jsonObj.getString("fname");         //String lname = jsonObj.getString("lname");         String aId = jsonObj.getString("id");         uId = aId;      } catch (Exception e) {         e.printStackTrace();     }    return uId;}这是使用邮递员的 json 响应,您会注意到没有标题[    {        "id": "emplo000000000043567",        "displayName": "Tester, user1",           },    {        "id": "emplo000000000035386",        "displayName": "Tester, User2",    }]
查看完整描述

3 回答

?
慕的地6264312

TA贡献1817条经验 获得超6个赞

就像上面提到的评论一样,这是一个 JSON 数组,因此需要将其解析为 JSON 数组而不是 JSON 对象。只需使用您正在使用的库中提供的 JSONArray 等效项。

另一方面,对于上面的 JSON 响应,将其解析为 JSON 数组会失败,因为格式不正确。请注意每个对象中每个最后一个键值末尾的逗号。这会导致解析器在尝试将其解析为 JSON 数组时失败。如果这是您在此处编写代码片段时的错误,请忽略本段。否则,如果那是实际的 JSON 响应,那么我想您需要提出一个新问题……在 Postman 论坛上。


查看完整回答
反对 回复 2022-11-30
?
慕容708150

TA贡献1831条经验 获得超4个赞

首先,你的json格式是错误的。正确的 json 格式应该是:


[

    {

        "id": "emplo000000000043567",

        "displayName": "Tester, user1"

    },

    {

        "id": "emplo000000000035386",

        "displayName": "Tester, User2"

    }

]

现在,

  1. 您的响应是 JSON 数组。因此,首先将解析后的对象分配到 JSON 数组中,如JSONArray array = (JSONArray) obj ;

  2. 这个 JSON 数组由两个 JSON 对象组成,因此遍历数组,获取每个 JSON 对象并打印/返回任何你想要的键/值对。

示例代码如下:(见逻辑)

public static void parseJsonResponse(String json)

            throws JsonParseException, JsonMappingException, IOException, ParseException {

        String aId ="";

        JSONParser parser = new JSONParser();

        Object obj = parser.parse(json);

        JSONArray array = (JSONArray) obj;

        for(int i=0;i<array.size();i++)

        {

            JSONObject jsonObject = (JSONObject) array.get(i);

            aId = (String) jsonObject.get("id");

            System.out.println(aId);

        }


    }

注意:我在这里使用了 json-simple java 库。


查看完整回答
反对 回复 2022-11-30
?
杨__羊羊

TA贡献1943条经验 获得超7个赞

这个案例有几个想法。这是我的。

  1. 使用 json 简单库[链接]

您可以简单地将您的库更改为 json 简单库,该库具有用于 json 字符串的解析器类,然后在处理 json 对象之前使用 instanceof 方法进行检测。

import org.json.simple.JSONArray;

import org.json.simple.JSONObject;

import org.json.simple.parser.JSONParser;


public static  String parseJsonResponse(String json){

    String uId ="";


    try {

        JSONParser parser = new JSONParser();

        Object whichone = parser.parse(json);


        if(whichone instanceof JSONObject)

        {

            JSONObject jsonObj = (JSONObject)whichone;

             // String fname = jsonObj.getString("fname");

             //String lname = jsonObj.getString("lname");

            if(jsonObj.containsKey("id"))

                uId = (String)jsonObj.get("id");

       }

        else if(whichone instanceof JSONArray)

        {

            JSONArray jsonArr = (JSONArray)whichone;

            JSONObject jsonObj = null;


            for(int i = 0; i < jsonArr.size(); i++)

            {

                jsonObj = (JSONObject) jsonArr.get(i);

                if(jsonObj.containsKey("id"))

                {

                    uId = (String)jsonObj.get("id");

                    System.out.println(uId);

                }


            }

        }

        else if(whichone instanceof String)

        {

            System.out.println("1?????" + whichone.toString());

        }

        else

        {

            System.out.println("2?????" + whichone.toString());

        }


     } catch (Exception e) {

         e.printStackTrace();

     }

    return uId;

}

从 json 异常中检测对象类型。在异常处理过程中,无论某个字符串是 json 对象还是 json 数组,您都可以捕获它。

import org.json.JSONArray;

import org.json.JSONObject;


public static  String parseJsonResponse(String json){

    String uId ="";


    try {

        JSONObject jobj =  new JSONObject(json);


        if(jobj.has("id"))

            uId = jobj.getString("id");


        System.out.println(uId);


     } catch (org.json.JSONException e) {

         //e.printStackTrace();


         JSONArray jsonArr = new JSONArray(json);

         JSONObject jsonObj = null;


         for(int i = 0; i < jsonArr.length(); i++)

            {

                jsonObj = jsonArr.getJSONObject(i);

                if(jsonObj.has("id"))

                {

                    uId = (String)jsonObj.get("id");

                    System.out.println(uId);

                }


            }

     }

    return uId;

}

用java工作。

解析第一个字符后,无论是json对象还是数组都可以找到。(我认为它会起作用......)


import org.json.JSONArray;

import org.json.JSONObject;

public static  String parseJsonResponse(String json){

    String uId ="";


    boolean isJobj = json.charAt(0) == '[';


    if(!isJobj) {

        JSONObject jobj =  new JSONObject(json);


        if(jobj.has("id"))

            uId = jobj.getString("id");


        System.out.println(uId);


     } else {

         JSONArray jsonArr = new JSONArray(json);

         JSONObject jsonObj = null;


         for(int i = 0; i < jsonArr.length(); i++)

            {

                jsonObj = jsonArr.getJSONObject(i);

                if(jsonObj.has("id"))

                {

                    uId = (String)jsonObj.get("id");

                    System.out.println(uId);

                }


            }

     }

    return uId;

}

祝你有美好的一天..


查看完整回答
反对 回复 2022-11-30
  • 3 回答
  • 0 关注
  • 109 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信