android - 如何解析 JSON 数组对象?
问题描述
我正在尝试ListView
在 Android 上获取 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);
解决方案
您应该使用诸如Gson之类的 JSON 库来为您解析这些对象。
添加你的 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 编写的。
推荐阅读
- python - Tensorflow2.0 - 如何将张量转换为 numpy() 数组
- xcode - macOS:SwiftUI 有一个更改 WKWebView URL 和主窗口标题的菜单项?
- ios - 如何更新滑块的最大值?
- javascript - 如何在漫画网站上创建关于某种类型的标签
- javascript - 如果有文本,则将类添加到轴
- c++ - [longjmp/setjmp]c++相同代码windows出现异常linux无错误且运行良好
- javascript - 在反应中绘制画布
- json - JSON 未验证
- php - 从 .txt 中抓取随机行,然后删除该行
- php - 我更改了我的管理员密码,但没有任何反应