Android解析JSONObject

Dom*_*nik 11 parsing android json

将json解析到我的Android应用程序时遇到了一些问题.

这是我的json文件的样子:

{
"internalName": "jerry91",
"dataVersion": 0,
"name": "Domin91",
"profileIconId": 578,
"revisionId": 0,
}
Run Code Online (Sandbox Code Playgroud)

正如您可以看到这种结构有点奇怪.我不知道如何在我的应用程序中读取该数据.我注意到这些都是对象而不是数组:/

kir*_*wka 24

你总是可以使用旧的json.org lib.在您的Java代码中:

  • 首先将您的json文件内容读入String;
  • 然后将其解析为JSONObject:

    JSONObject myJson = new JSONObject(myJsonString);
    // use myJson as needed, for example 
    String name = myJson.optString("name");
    int profileIconId = myJson.optInt("profileIconId");
    // etc
    
    Run Code Online (Sandbox Code Playgroud)


Lan*_*tel 10

更新2018年

5年后,在android上解析json有一个新的"标准".它被称为moshi,人们可以认为它是GSON 2.0.它非常相似,但设计错误已经修复,这是您开始使用它时的第一个障碍.

https://github.com/square/moshi

首先将它添加为mvn依赖,如下所示:

<dependency>
  <groupId>com.squareup.moshi</groupId>
  <artifactId>moshi-kotlin</artifactId>
  <version>1.6.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

添加之后我们可以这样使用(取自示例):

String json = ...;

Moshi moshi = new Moshi.Builder().build();
JsonAdapter<BlackjackHand> jsonAdapter = moshi.adapter(BlackjackHand.class);

BlackjackHand blackjackHand = jsonAdapter.fromJson(json);
System.out.println(blackjackHand);
Run Code Online (Sandbox Code Playgroud)

GitHub页面上的更多信息:)

[旧]

我建议使用Gson.

以下是教程的一些链接:

  1. 如何使用GSON从json格式转换java objecto
  2. 使用GSON解析JSON文件
  3. 简单的GSON示例
  4. 将JSON数据转换为Java对象

作为Gson 的替代品你可以使用杰克逊.

  1. 杰克逊在5分钟内
  2. 如何将java对象转换为json和从json转换

这个库基本上将您的JSON解析为您指定的Java类.


Jac*_*ani 9

要知道,如果字符串JSONArrayJSONObject

JSONArray 字符串是这样的

[{
"internalName": "blaaa",
"dataVersion": 0,
"name": "Domin91",
"profileIconId": 578,
"revisionId": 0,
},
{
"internalName": "blooo",
"dataVersion": 0,
"name": "Domin91",
"profileIconId": 578,
"revisionId": 0,
}]
Run Code Online (Sandbox Code Playgroud)

而这个String就像一个 JSONOject

{
"internalName": "domin91",
"dataVersion": 0,
"name": "Domin91",
"profileIconId": 578,
"revisionId": 0,
} 
Run Code Online (Sandbox Code Playgroud)

但如何从JSONArray和调用元素JSONObject

JSNOObject 这样的信息

首先用数据填充对象

JSONObject object = new JSONObject(
"{
\"internalName\": \"domin91\",
\"dataVersion\": 0,
\"name\": \"Domin91\",
\"profileIconId\": 578,
\"revisionId\": 0,
}"
);
Run Code Online (Sandbox Code Playgroud)

现在让我们从对象调用信息

String myusername = object.getString("internalName");
int dataVersion   = object.getInt("dataVersion");
Run Code Online (Sandbox Code Playgroud)

如果您想从JSONArray您那里调用信息,必须知道对象位置编号是什么,或者您必须循环JSONArray以获取信息

循环数组

for ( int i = 0; i < jsonarray.length() ; i++)
{
   //this object inside array you can do whatever you want   
   JSONObject object = jsonarray.getJSONObject(i);
}
Run Code Online (Sandbox Code Playgroud)

如果我知道里面的对象位置JSONArray就像这样称呼它

//0 mean first object inside array
 JSONObject object = jsonarray.getJSONObject(0);
Run Code Online (Sandbox Code Playgroud)