Android JSONObject – Android中的JSON解析

时间:2020-02-23 14:29:01  来源:igfitidea点击:

Android JSONObject用于android应用中的JSON解析。
在本教程中,我们将在android应用程序中讨论并实现一个" JSONObject"以解析JSON数据。
JSON代表JavaScript Object Notation。

什么是JSON?

JSON用于与服务器进行数据交换(发布和检索)。
因此,了解语法及其可用性非常重要。
JSON是XML的最佳替代方法,它对人类更具可读性。
JSON与语言无关。
由于语言的依赖性,我们可以使用任何语言(Java/C/C ++)对JSON进行编程。

来自服务器的JSON响应包含许多字段。
下面提供了一个示例JSON响应/数据。
我们将其用作参考并在我们的应用程序中实施。

{
"title":"JSONParserTutorial",
"array":[
  {
  "company":"Google"
  },
  {
    "company":"Facebook"
  },
  {
  "company":"LinkedIn"
  },
  {
    "company" : "Microsoft"
  },
  {
    "company": "Apple"
  }
  ],
  "nested":{
  "flag": true,
  "random_number":1
  }
}

我们从此页面创建了一个随机的JSON数据字符串。
这对于编辑JSON数据非常方便。

JSON数据包含以下列出的4个主要组件:

  • Array:JSONArray括在方括号中。
    它包含一组对象
  • 对象:大括号({)中包含的数据是单个JSONObject。
    嵌套的JSONObjects是可能的,并且非常常用
  • 密钥:每个JSONObject都有一个包含特定值的密钥字符串
  • 值:每个键都有一个单一值,该值可以是字符串,双精度型,整数,布尔型等任何类型

Android JSONObject

我们将根据上面提供的静态JSON数据字符串创建JSONObject,并在ListView中显示JSONArray。
我们将应用程序名称更改为JSON数据中的标题字符串。

Android示例中的JSON解析

下图显示了用于json解析示例的android studio项目。
该项目由默认活动和布局(带有ListView)组成。

Android JSON解析代码

下面给出了" activity_main.xml"。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
  xmlns:tools="https://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:paddingBottom="@dimen/activity_vertical_margin"
  android:paddingLeft="@dimen/activity_horizontal_margin"
  android:paddingRight="@dimen/activity_horizontal_margin"
  android:paddingTop="@dimen/activity_vertical_margin"
  tools:context="com.theitroad.jsonparsing.MainActivity">

  <ListView
      android:layout_width="wrap_content"
      android:id="@+id/list_view"
      android:layout_height="match_parent"

</RelativeLayout>

MainActivity.java在下面给出。

package com.theitroad.jsonparsing;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ArrayAdapter;

import android.widget.ListView;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

  String json_string = "{\n" +
          "  \"title\":\"JSONParserTutorial\",\n" +
          "  \"array\":[\n" +
          "    {\n" +
          "    \"company\":\"Google\"\n" +
          "    },\n" +
          "    {\n" +
          "      \"company\":\"Facebook\"\n" +
          "    },\n" +
          "    {\n" +
          "    \"company\":\"LinkedIn\"\n" +
          "    },\n" +
          "    {\n" +
          "      \"company\" : \"Microsoft\"\n" +
          "    },\n" +
          "    {\n" +
          "      \"company\": \"Apple\"\n" +
          "    }\n" +
          "    ],\n" +
          "    \"nested\":{\n" +
          "    \"flag\": true,\n" +
          "    \"random_number\":1\n" +
          "    }\n" +
          "}";

  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      try {

          ListView listView = (ListView) findViewById(R.id.list_view);
          
          List<String> items = new ArrayList<>();
          JSONObject root = new JSONObject(json_string);

          JSONArray array= root.getJSONArray("array");

          this.setTitle(root.getString("title"));

          for(int i=0;i<array.length();i++)
          {
              JSONObject object= array.getJSONObject(i);
              items.add(object.getString("company"));
          }

          ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                  android.R.layout.simple_list_item_1, items);

          if (listView != null) {
              listView.setAdapter(adapter);
          }

          JSONObject nested= root.getJSONObject("nested");
          Log.d("TAG","flag value "+nested.getBoolean("flag"));

      } catch (JSONException e) {
          e.printStackTrace();
      }

  }
}

我们遍历了" JSONArray"对象,并获取了每个子" JSONObject"中存在的字符串,并将它们添加到了ListView中显示的ArrayList中。
应用程序名称使用来更改:

this.setTitle();

Android JSONObject示例输出

该应用程序的输出如下。
您可以在顶部的工具列中看到标题名称的更改。

Google已发布了用于JSON解析的Volley库。
我们将在以后的教程中实现。
GSON是一个Java库,可将Java对象转换为JSON,反之亦然。

我们的目标是概述android中的JSON解析,因为JSON是当今公认的用于在服务器/Web应用程序之间传输数据的标准。

当我们开发可从服务器发送和接收数据的应用程序时,Android JSON解析将非常方便。