Android JSON教程:创建和解析JSON数据

本教程介绍了如何在Android上使用JSONJSON 代表(Java脚本对象表示法)。 它是一种简单且轻量级的数据交换格式,可以由人和机器轻松读取。 JSON 是一种独立于语言的文本格式。 它以文本格式表示数据,因此可以轻松对其进行解析。

JSON简介

JSON使用两种不同的结构:

  • 名称/值对的集合
  • 数组

第一种结构可用于对对象建模,因为对象是保存一些值的属性的集合。 数组可用于建模列表,对象数组等。 因此,使用这两种结构,我们可以以简单有效的方式在两台机器之间传输数据。 最近,JSON取得了巨大的成功,并且大多数可用的API都支持JSON格式。 让我们看看如何用JSON表示数据。

JSON中的对象使用{..} 进行建模,而属性可以使用 name:值对进行建模 。Value可以是对象,数组或“简单”值,例如原始值(int,字符串,布尔值等)。


因此,如果我们有一个像这样的java类:

public class Person {

    private String name;
    private String surname;    
       .....
}

可以用JSON表示

{"surname":"Swa",
 "name":"Android",
  ....
}

数组使用[..]表示为JSON。 数组元素可以是对象,数组等。

现在我们知道了更好的JSON格式,我们可以开始在Android中使用JSON了。

在Android中使用JSON

在Android中以及通常在所有环境中,都有两种类型的操作:

  • 将Java类转换为JSON数据 (序列化)
  • 解析JSON数据并创建Java类(反序列化)

假设我们必须使用HTTP连接将数据发送到远程服务器,并且数据在java类中表示。 首先,我们将Java类转换为JSON数据。 例如,假设我们有一个这样的Person类:

public class Person {

    private String name;
    private String surname;
    private Address address;
    private List<PhoneNumber> phoneList;

    // get and set

    public class Address {
        private String address;
        private String city;
        private String state;
        // get and set        
    }

    public class PhoneNumber {
        private String type;
        private String number;

        // get and set      
    }
}

如您所见,该类几乎涵盖了所有对象类型:字符串,数组,内部类等等。 如何将其转换为JSON? 让我们创建一个实用程序类。

public class JsonUtil {

public static String toJSon(Person person) {
      try {
        // Here we convert Java Object to JSON 
        JSONObject jsonObj = new JSONObject();
        jsonObj.put("name", person.getName()); // Set the first name/pair 
        jsonObj.put("surname", person.getSurname());

        JSONObject jsonAdd = new JSONObject(); // we need another object to store the address
        jsonAdd.put("address", person.getAddress().getAddress());
        jsonAdd.put("city", person.getAddress().getCity());
        jsonAdd.put("state", person.getAddress().getState());

        // We add the object to the main object
        jsonObj.put("address", jsonAdd);

        // and finally we add the phone number
        // In this case we need a json array to hold the java list
        JSONArray jsonArr = new JSONArray();

        for (PhoneNumber pn : person.getPhoneList() ) {
            JSONObject pnObj = new JSONObject();
            pnObj.put("num", pn.getNumber());
            pnObj.put("type", pn.getType());
            jsonArr.put(pnObj);
        }

        jsonObj.put("phoneNumber", jsonArr);

        return jsonObj.toString();

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

    return null;

}

让我们分析一下代码。 在第6行,我们创建了一个新的JSON对象,它充当我们数据的容器。 接下来,我们放置一些名称/值对(第7-8行)。 如您所见,它们与Person类的属性匹配。 查看Person类的第10行,我们注意到我们有一个内部类,因此我们需要另一个JSON对象来表示它(第10-13行)。 构建JSON对象后,将其放在主对象第16行中。在第17行中,Person类中有一个电话列表。 在这种情况下,我们需要一个JSONArray来对java List进行建模,对于列表中的每个项目,我们都需要JSON Object进行映射。 运行本文结尾处提供的源代码,我们将具有:

{
   "phoneNumber": [
      {
         "type": "work",
         "num": "11111"
      },
      {
         "type": "home",
         "num": "2222"
      }
   ],
   "address": {
      "state": "World",
      "address": "infinite space, 000",
      "city": "Android city"
   },
   "surname": "Swa",
   "name": "Android"
}

这是我们的Person对象的JSON表示形式。 我使用了一个不错的网站来帮助测试JSON数据( http://www.jsontest.com/ )。 从结果中可以看到,我们的JSON数据有效:

android_json_tutorial [4]

解析JSON数据:反序列化

另一个有趣的方面是解析JSON数据并创建Java类。 即使有自动工具根据JSON数据创建POJO类,也要知道背后的内容,这一点很重要。 当您拥有JSON数据时,第一步是实例化一个解析器,该解析器有助于获取JSON中的值。

JSONObject jObj = new JSONObject(data);

数据包含JSON字符串的位置。 现在查看JSON数据文件,我们可以开始提取数据。 例如,如果我们假设获得了与上面显示的JSON数据类似的JSON数据(请参阅JSON Person数据),并且我们想要获得姓氏:

String surname = jObj.getString("surname");

当我们要获取地址对象时,可以使用:

JSONObject subObj = jObj.getJSONObject("address");
String city = subObj.getString("city");
...

如果我们要获取电话号码列表,我们只需:

JSONArray jArr = jObj.getJSONArray("list");
for (int i=0; i < jArr.length(); i++) {
    JSONObject obj = jArr.getJSONObject(i);
    ....
}

使用这些代码,我们可以在Android中处理JSON。 如果您对更复杂的JSON示例感兴趣,请查看Android weather app:JSON,HTTP和Openweathermap 。 在此说明如何创建一个可获取当前天气状况的完整应用程序。

可用的源代码@ github

参考: Android JSON教程:通过Surviving w / Android博客从我们的JCG合作伙伴 Francesco Azzola 创建和解析JSON数据

翻译自: https://www.javacodegeeks.com/2013/10/android-json-tutorial-create-and-parse-json-data.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Android 中,我们可以使用以下步骤来使用 JSON 数据: 1. 首先,我们需要将 JSON 数据下载或从 API 中获取到。可以使用 HttpURLConnection 或 OkHttp 等库进行网络请求。 2. 接下来,我们需要解析 JSON 数据。可以使用 Android 自带的 JSONObject 或 JSONArray 类,也可以使用第三方库如 Gson、Jackson 等。 3. 将解析后的数据存储到对象或集合中,并在应用程序中使用它们。 举个例子,以下是一个使用 Gson 库解析 JSON 数据的示例代码: ```java // 创建 Gson 对象 Gson gson = new Gson(); // 解析 JSON 数据 String json = "{ \"name\": \"John\", \"age\": 30 }"; Person person = gson.fromJson(json, Person.class); // 在应用程序中使用解析后的数据 String name = person.getName(); int age = person.getAge(); ``` 其中,Person 类表示 JSON 数据中的对象,它包含两个属性:name 和 age。fromJson() 方法将 JSON 数据转换为 Person 对象。 希望这个例子可以帮助你了解如何在 Android 中使用 JSON 数据。 ### 回答2: 在Android中使用JSON数据主要分为两个步骤:解析JSON数据和生成JSON数据。 1. 解析JSON数据Android提供了JsonReader和JsonWriter两个类来解析和生成JSON数据JsonReader用于读取JSON数据JsonWriter用于生成JSON数据。 首先,我们可以通过网络请求获取到JSON数据,然后使用JsonReader类将其解析Java对象。具体步骤如下: 1) 创建一个InputStream对象,用于读取JSON数据。 2) 将InputStream对象传递给JsonReader的构造函数,创建一个JsonReader对象。 3) 使用JsonReader对象的方法逐步解析JSON数据,将其转换为Java对象。 例如,假设我们有一个JSON数据如下: { "name": "John", "age": 25, "city": "New York" } 我们可以使用以下代码将其解析Java对象: InputStream inputStream = // 从网络请求获取到的数据JsonReader reader = new JsonReader(new InputStreamReader(inputStream, "UTF-8")); String name = ""; int age = 0; String city = ""; reader.beginObject(); while (reader.hasNext()) { String key = reader.nextName(); if (key.equals("name")) { name = reader.nextString(); } else if (key.equals("age")) { age = reader.nextInt(); } else if (key.equals("city")) { city = reader.nextString(); } } reader.endObject(); reader.close(); 现在,我们可以使用name、age和city变量来访问解析后的JSON数据。 2. 生成JSON数据Android中生成JSON数据也很简单。我们可以使用JsonWriter类来生成JSON数据。 例如,我们要生成以下JSON数据: { "name": "John", "age": 25, "city": "New York" } 我们可以使用以下代码生成: StringWriter stringWriter = new StringWriter(); JsonWriter writer = new JsonWriter(stringWriter); writer.beginObject(); writer.name("name").value("John"); writer.name("age").value(25); writer.name("city").value("New York"); writer.endObject(); writer.close(); String json = stringWriter.toString(); 现在,json变量中保存的就是生成的JSON数据。 总结: 在Android中使用JSON数据,我们可以通过JsonReader类将JSON数据解析Java对象,然后使用该对象进行操作;也可以使用JsonWriter类生成JSON数据。以上就是在Android中使用JSON数据的基本操作。 ### 回答3: 在Android中,可以通过以下步骤使用JSON数据: 1. 获取JSON数据:可以通过网络请求、本地文件或者数据库等方式获取JSON数据。一般来说,最常见的方式是使用网络请求获取JSON数据。 2. 解析JSON数据Android提供了JsonReader和JsonParser等工具类来解析JSON数据。可以根据JSON数据的结构和需求选择合适的解析方式。JsonReader主要是逐行读取JSON数据,而JsonParser则可以将整个JSON数据解析为一个Json对象或者Json数组。 3. 解析JSON对象:如果JSON数据是一个对象,可以使用JsonObject类来解析。首先将JSON数据转换为Json对象,然后可以通过getXXX()方法来获取对应的键值对。 4. 解析JSON数组:如果JSON数据是一个数组,可以使用JsonArray类来解析。同样,需要先将JSON数据转换为Json数组,然后可以通过getXXX()方法来遍历获取其中的元素。 5. 处理JSON数据:一旦解析完成,就可以根据需要对JSON数据进行处理。可以将数据展示在UI界面上,或者保存到数据库中,还可以进行其他的业务逻辑处理。 总的来说,在Android中使用JSON数据的过程就是获取JSON数据解析JSON数据、处理JSON数据的过程。通过这种方式,我们可以方便地在Android应用中使用和展示来自网络或本地的JSON数据

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值