您好我正在尝试从网址获取JSON到ListItem,我想在其中显示它。 但我得到的错误如下:
json parsing error:值为48600123456,类型为java.lang.String 无法转换为JSONObject。
部分代码:
@Override
protected Void doInBackground(Void... arg0) {
HttpHandler sh = new HttpHandler();
// Making a request to url and getting response
String jsonStr = sh.makeServiceCall(url);
Log.e(TAG, "Response from url: " + jsonStr);
if (jsonStr != null) {
try {
JSONObject jsonObj = new JSONObject(jsonStr);
// Getting JSON Array node
JSONArray contacts = jsonObj.getJSONArray("phones");
// looping through All Contacts
for (int i = 0; i < contacts.length(); i++) {
JSONObject c = contacts.getJSONObject(i);
String name= c.getString("name");
String phone = c.getString("phone");
String phone2 = c.getString("phone2");
// tmp hash map for single contact
HashMap<String, String> contact = new HashMap<>();
// adding each child node to HashMap key => value
contact.put("name", name);
contact.put("phone", phone);
contact.put("pone2", phone2);
//adding contact to contact list
contactList.add(contact);
}
还有我的JSON。
{“phone”:[“phone:48600123456”,“phone2:48600234532”,“phone3:48600567234”]}
有什么问题?
答案 0 :(得分:2)
该方法在
的第一次迭代时失败JSONObject c = contacts.getJSONObject(i);
因为,根据输入中给出的json,变量contacts
是String
的数组(&#34; 48600123456&#34;,&#34; 48600234532&#34;,&# 34; 48600567234&#34;),而不是JSONObject
这是解析给定json的方法:
...
// Getting JSON Array node
JSONArray contacts = jsonObj.getJSONArray("phones");
// looping through All Contacts
for (int i = 0; i < contacts.length(); i++) {
String value = contacts.getString(i);
...
}
答案 1 :(得分:0)
您需要使用正确的类型索引数组。每个值都是一个字符串,因此请使用getString
。否则,您只需使用get
,然后再转换对象。
老实说,我认为你应该只使用手机列表,而不是地图,但这是你正在尝试的正确代码
// Getting JSON Array node
JSONArray phones = jsonObj.getJSONArray("phones");
// tmp hash map for single contact
Map<String, String> phoneMap = new HashMap<>();
// adding each phone to HashMap key => value
for (int i =0; i < phones.getLength(); i++) {
phoneMap.put("phone"+i, phones.getString(i));
}
//adding phones to contact list
contactList.add(phoneMap);
实际定义Contact
对象可能是值得的。然后你可以尝试使用Gson,例如,为你解析JSON
修改强>
"name: value"
仍然是一个字符串。如果您需要一组JSON对象,则外部必须有{}
,密钥需要[{"phone": "48600123456", "phone2": "48600234532"}]
如果你格式化,你可以清楚地看到差异。
{
"phones": ["phone: 48600123456", "phone2: 48600234532", "phone3: 48600567234"]
}
vs
{
"phones": [{
"phone": "48600123456",
"phone2": "48600234532",
"phone3": "48600567234"
}]
}
vs
{
"phones": [{
"phone": "48600123456"
},
{
"phone": "48600234532"
},
{
"phone": "48600567234"
}
]
}
就个人而言,我认为您发布的第一种方式没有任何问题,这就是上面的代码所假设的
{
"phones": ["48600123456", "48600234532", "48600567234"]
}
答案 2 :(得分:-1)
您在jsonarray中没有任何JsonObject ,您试图在此处解析代码
for (int i = 0; i < contacts.length(); i++) {
JSONObject c = contacts.getJSONObject(i);
直接从您的数组中访问您的字符串
for (int i = 0; i < contacts.length(); i++) {
String contact=contacts.getString(i);
}
答案 3 :(得分:-1)
从您的代码中,我认为您的json结构如下:
{ “电话”:[ { “名”: “48600123456”, “手机”: “48600234532”, “PHONE2”: “48600567234”}]}