3 回答
TA贡献1817条经验 获得超6个赞
就像上面提到的评论一样,这是一个 JSON 数组,因此需要将其解析为 JSON 数组而不是 JSON 对象。只需使用您正在使用的库中提供的 JSONArray 等效项。
另一方面,对于上面的 JSON 响应,将其解析为 JSON 数组会失败,因为格式不正确。请注意每个对象中每个最后一个键值末尾的逗号。这会导致解析器在尝试将其解析为 JSON 数组时失败。如果这是您在此处编写代码片段时的错误,请忽略本段。否则,如果那是实际的 JSON 响应,那么我想您需要提出一个新问题……在 Postman 论坛上。
TA贡献1831条经验 获得超4个赞
首先,你的json格式是错误的。正确的 json 格式应该是:
[
{
"id": "emplo000000000043567",
"displayName": "Tester, user1"
},
{
"id": "emplo000000000035386",
"displayName": "Tester, User2"
}
]
现在,
您的响应是 JSON 数组。因此,首先将解析后的对象分配到 JSON 数组中,如JSONArray array = (JSONArray) obj ;
这个 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 库。
TA贡献1943条经验 获得超7个赞
这个案例有几个想法。这是我的。
使用 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;
}
祝你有美好的一天..
添加回答
举报