Android JSONObject用于Android应用中的JSON解析。在本教程中,我们将讨论并在我们的Android应用程序中实现一个JSONObject
来解析JSON数据。
什么是JSON?
JSON用于从服务器进行数据交换(发布和检索)。因此,了解语法及其可用性是很重要的。JSON是XML的最佳替代方案,其可读性更强。JSON是语言独立的 。由于语言无关性,我们可以用任何语言(Java/C/C++)编写JSON。来自服务器的JSON响应由许多字段组成。下面给出了一个JSON响应/数据示例。我们将使用它作为引用并在我们的应用程序中实现它。
1{
2 "title":"JSONParserTutorial",
3 "array":[
4 {
5 "company":"Google"
6 },
7 {
8 "company":"Facebook"
9 },
10 {
11 "company":"LinkedIn"
12 },
13 {
14 "company" : "Microsoft"
15 },
16 {
17 "company": "Apple"
18 }
19 ],
20 "nested":{
21 "flag": true,
22 "random_number":1
23 }
24}
我们已经从This页面)创建了一个随机的json数据字符串。它可以方便地编辑JSON数据。JSON数据由下面列出的4个主要组成部分组成:
1.数组 :一个** JSON数组** 用方括号([)括起来。它包含一组对象 2.对象 :用大括号({)括起来的数据是单个JSONObject。嵌套的JSONObject是可能的,也是非常常用的 3.Key :每个JSONObject都有一个包含一定值的Key字符串 4.值 :每个键都有一个值,可以是字符串、双精度、整型、布尔型等任意类型
Android JSONObject
我们将从上面给出的静态JSON数据字符串创建一个JSON对象,并在ListView.中显示该JSON数组我们将在JSON数据中将应用程序名称更改为标题字符串。
Android中的JSON解析示例
下图显示了json解析示例的Android工作室项目。该项目由默认的活动和布局(带有ListView)组成。
Android JSON解析代码
active_main.xml
如下所示。
1<?xml version="1.0" encoding="utf-8"?>
2<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
3 xmlns:tools="https://schemas.android.com/tools"
4 android:layout_width="match_parent"
5 android:layout_height="match_parent"
6 android:paddingBottom="@dimen/activity_vertical_margin"
7 android:paddingLeft="@dimen/activity_horizontal_margin"
8 android:paddingRight="@dimen/activity_horizontal_margin"
9 android:paddingTop="@dimen/activity_vertical_margin"
10 tools:context="com.journaldev.jsonparsing.MainActivity">
11
12 <ListView
13 android:layout_width="wrap_content"
14 android:id="@+id/list_view"
15 android:layout_height="match_parent"/>
16
17</RelativeLayout>
MainActivity.java
如下所示。
1package com.journaldev.jsonparsing;
2
3import android.support.v7.app.AppCompatActivity;
4import android.os.Bundle;
5import android.util.Log;
6import android.widget.ArrayAdapter;
7
8import android.widget.ListView;
9
10import org.json.JSONArray;
11import org.json.JSONException;
12import org.json.JSONObject;
13
14import java.util.ArrayList;
15import java.util.List;
16
17public class MainActivity extends AppCompatActivity {
18
19 String json_string = "{\n" +
20 " \"title\":\"JSONParserTutorial\",\n" +
21 " \"array\":[\n" +
22 " {\n" +
23 " \"company\":\"Google\"\n" +
24 " },\n" +
25 " {\n" +
26 " \"company\":\"Facebook\"\n" +
27 " },\n" +
28 " {\n" +
29 " \"company\":\"LinkedIn\"\n" +
30 " },\n" +
31 " {\n" +
32 " \"company\" : \"Microsoft\"\n" +
33 " },\n" +
34 " {\n" +
35 " \"company\": \"Apple\"\n" +
36 " }\n" +
37 " ],\n" +
38 " \"nested\":{\n" +
39 " \"flag\": true,\n" +
40 " \"random_number\":1\n" +
41 " }\n" +
42 "}";
43
44 @Override
45 protected void onCreate(Bundle savedInstanceState) {
46 super.onCreate(savedInstanceState);
47 setContentView(R.layout.activity_main);
48 try {
49
50 ListView listView = (ListView) findViewById(R.id.list_view);
51
52 List<String> items = new ArrayList<>();
53 JSONObject root = new JSONObject(json_string);
54
55 JSONArray array= root.getJSONArray("array");
56
57 this.setTitle(root.getString("title"));
58
59 for(int i=0;i<array.length();i++)
60 {
61 JSONObject object= array.getJSONObject(i);
62 items.add(object.getString("company"));
63 }
64
65 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
66 android.R.layout.simple_list_item_1, items);
67
68 if (listView != null) {
69 listView.setAdapter(adapter);
70 }
71
72 JSONObject nested= root.getJSONObject("nested");
73 Log.d("TAG","flag value "+nested.getBoolean("flag"));
74
75 } catch (JSONException e) {
76 e.printStackTrace();
77 }
78
79 }
80}
我们已经遍历了JSONArray
对象,并获取了每个子对象JSONObject
中存在的字符串,并将它们添加到ListView中显示的[ArrayList](/community/tutorials/java-arraylist)中。使用以下命令更改应用程序名称:
1this.setTitle();
Android JSONObject示例输出
应用程序的输出如下所示。您可以在顶部的工具栏中看到标题名称已更改。谷歌发布了一个用于JSON解析的群集库。我们将在后面的教程中实现这一点。GSON 是一个JAVA库,可以将Java对象转换为JSON,反之亦然。这结束了Android JSONObject教程。我们的目标是概述Android中的JSON解析,因为JSON是当今在服务器/Web应用程序之间传输数据的公认标准。当我们开发从服务器发送和接收数据的应用程序时,Android JSON解析将非常方便。您可以从下面的链接下载Android JSON解析项目。
参考资料:官方Documentation