[英]How to parse a JSON Array Object?
我正在尝试为Android上的ListView
获取JSON数组,但到目前为止还没有完成。
我的JSON是这样的
[
{
"iD":1,
"name":"name1"
},
{
"iD":2,
"name":"name2"
},
{
"iD":3,
"name":"name3"
},
{
"iD":4,
"name":"name4"
}
]
还尝试尝试第二种JSON格式
{
"userdata":[
{
"iD":1,
"name":"name1"
},
{
"iD":2,
"name":"name2"
},
{
"iD":3,
"name":"name3"
},
{
"iD":4,
"name":"name4"
}
]
}
我的Java看起来像
private void loadIntoListView(String json) throws JSONException {
Log.e("log1 = ", json);
JSONArray jsonArray = new JSONArray(json);
Log.e("log2 = ","5" ); //Integer.toString(jsonArray.length())
String[] heroes = new String[jsonArray.length()];
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject obj = jsonArray.getJSONObject(i);
heroes[i] = obj.getString("name");
}
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, heroes);
listView.setAdapter(arrayAdapter);
}
private void loadIntoListView(String json) throws JSONException {
Log.e("result 2 = ", json);
JSONObject entries = new JSONObject(json);
JSONArray jsonArray = entries.getJSONArray("userdata");
Log.e("length = ","5" ); //Integer.toString(jsonArray.length())
String[] heroes = new String[jsonArray.length()];
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject obj = jsonArray.getJSONObject(i);
heroes[i] = obj.getString("name");
}
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, heroes);
listView.setAdapter(arrayAdapter);
}
我看到了第一个日志,但看不到第二个。 另外,我无法获取ListView
的名称。
require_once('connection.php');
$heroes = array();
$sql = "SELECT iD, name FROM valTable;";
$stmt = $conn->prepare($sql);
$stmt->execute();
$stmt->bind_result($id, $name);
while($stmt->fetch()){
$temp = [
'iD'=>$id,
'name'=>$name
];
array_push($heroes, $temp);
}
echo json_encode($heroes);
您应该使用JSON库(例如Gson)来解析这些对象。
添加您的gradle依赖项
implementation 'com.google.code.gson:gson:2.8.5'
您可以创建类似的对象
data class JsonRootObject(val userdata: List<User>)
data class User(val iD:Int, val name:String)
然后解析你的对象
val myParsedObject = Gson().fromJson(jsonString, JsonRootObject::class.java);
确保您的字段名称与要解析的对象相同,这也意味着区分大小写。 如果要更改其映射名称,则可能需要使用@SerializedName("id")
批注,例如
class User {
@SerializedName("id")
lateinit var id: Int
@SerializedName("my_name")
lateinit var name: String
}
考虑对第二个对象的回答
{
"userdata":[
{
"iD":1,
"name":"name1"
},
{
"iD":2,
"name":"name2"
},
{
"iD":3,
"name":"name3"
},
{
"iD":4,
"name":"name4"
}
]
}
当然,所有这些都是用Kotlin编写的。
使用try catch代替throw
try {
JSONArray jsonArray = new JSONArray(json);
Log.e("log2 = ", "5"); //Integer.toString(jsonArray.length())
String[] heroes = new String[jsonArray.length()];
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject obj = jsonArray.getJSONObject(i);
heroes[i] = obj.getString("name");
}
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, heroes);
listView.setAdapter(arrayAdapter);
}
catch (Exception e)
{
Log.e("log3 = ", ""+e);
}
首先尝试将您的String json
转换为JSONObject
,然后将该JSONObject
转换为JSONArray
。 看到这个答案 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.