我是 JSON 的新手以及我尝试从服务器检索 JSON 的操作
datafromServer = bufferedReader.readLine();
inputStream.close();
JSONArray jsonArray = new JSONArray(datafromServer );
并且遇到了这个例外:
org.json.JSONException:Value {"姓氏":"希克斯"" ID":18,"电子邮件":" dwaynehicks@usssulaco.com" ;,"如first_name":"德韦恩"} 类型org.json.JSONObject无法转换为JSONArray
所以我找到this回答:
JSONObject object = new JSONObject(result);
JSONArray Jarray = object.getJSONArray("contacts");
for (int i = 0; i < Jarray.length(); i++) {
JSONObject Jasonobject = Jarray.getJSONObject(i);
现在,问题是,在答案中,OP的对象形成为:
"contacts": [{
.....
.....
]
在这个JSON中。当我形成(没有键映射到这一行)时:
{"last_name":"Hicks","id":18,"email":"dwaynehicks@usssulaco.com","first_name":"Dwayne"}
那么我如何修改这一行*JSONArray Jarray = object.getJSONArray("contacts");*
?
我没有这样的钥匙。
由于
答案 0 :(得分:2)
您不需要JSONArray,您可以像这样从JSONObject获取数据:
JSONObject jsonObject = new JSONObject(result);
String lastName = jsonObject.getString("last_name");
int id = jsonObject.getInt("id");
String email = jsonObject.getString("email");
String firstName = jsonObject.getString("first_name");
答案 1 :(得分:2)
{"last_name":"Hicks","id":18,"email":"dwaynehicks@usssulaco.com","first_name":"Dwayne"}
^是单个JSON对象的实例。
{"contacts": [{...}, {...}]}
^是单个JSON数组的实例。 JSON数组中可以包含0到多个JSON对象。
第一个错误是由尝试使用表示JsonObject的String创建JSONArray引起的。
&#34;回答&#34;你发现的是一个人阅读JsonObject,从该对象获取JsonArray(联系人),然后循环遍历该JsonArray中的所有JsonObjects的示例。这不适用于您,因为您只有一个扁平的JsonObject。
阅读API以查找适合获取每种类型的方法。在这种情况下,由于你有一个只有一个JsonObject的String对象,你可以使用JsonObjects构造函数,它在注释中表示像@SripadRaj这样的字符串。
答案 2 :(得分:1)
Json代码需要进入try catch
try{
JSONObject object = new JSONObject(result);
JSONArray Jarray = object.getJSONArray("contacts");
for (int i = 0; i < Jarray.length(); i++) {
JSONObject Jasonobject = Jarray.getJSONObject(i);
String lastName = jsonObject.getString("last_name");
int id = jsonObject.getInt("id");
String email = jsonObject.getString("email");
String firstName = jsonObject.getString("first_name");
}
}catch (JSONException e) {
e.printStackTrace();
}