`

JSON数据解析

 
阅读更多

什么是JSON:

JSON即JavaScript Object Natation, 它是一种轻量级的数据交换格式, 与XML一样, 是广泛被采用的客户端和服务端交互的解决方案.

JSON对象: JSON中对象(Object)以"{"开始, 以"}"结束. 对象中的每一个item都是一个key-value对, 表现为"key:value"的形式, key-value对之间使用逗号分隔. 如:{"name":"coolxing", "age"=24, "male":true, "address":{"street":"huiLongGuan", "city":"beijing", "country":"china"}}. JSON对象的key只能是string类型的, 而value可以是string, number, false, true, null, Object对象甚至是array数组, 也就是说可以存在嵌套的情况.

JSON数组: JSON数组(array)以"["开始, 以"]"结束, 数组中的每一个元素可以是string, number, false, true, null, Object对象甚至是array数组, 数组间的元素使用逗号分隔. 如["coolxing", 24, {"street":"huiLongGuan", "city":"beijing", "country":"china"}].

 

JSON数据的解析:解析JSON数据, 首先需要明确待解析的是JSON Object还是JSON array, 然后需要确定采用哪种解析技术. android平台上一般有2种解析技术可供选择: android内置的org.json包和google的开源gson库. 以下将分别采用这两种技术解析JSON对象和JSON数组.

1.  采用android内置的org.json包解析JSON对象. 假设待解析的JSON数据为json = "{\"name\":\"coolxing\", \"age\"=24, \"male\":true, \"address\":{\"street\":\"huiLongGuan\", \"city\":\"beijing\", \"country\":\"china\"}}", 其中\用于转义表达式中的双引号. 首先定义2个JavaBean:

    public class Address {  
        private String street;  
        private String city;  
        private String country;  
      
        public Address() {  
            super();  
        }  
      
        public Address(String street, String city, String country) {  
            super();  
            this.street = street;  
            this.city = city;  
            this.country = country;  
        }  
      
        public String getStreet() {  
            return street;  
        }  
      
        public void setStreet(String street) {  
            this.street = street;  
        }  
      
        public String getCity() {  
            return city;  
        }  
      
        public void setCity(String city) {  
            this.city = city;  
        }  
      
        public String getCountry() {  
            return country;  
        }  
      
        public void setCountry(String country) {  
            this.country = country;  
        }  
      
        @Override  
        public String toString() {  
            return "Address [street=" + street + ", city=" + city + ", country="  
                    + country + "]";  
        }  
      
    }  

 

    public class Person {  
        private String name;  
        private int age;  
        private boolean male;  
        private Address address;  
      
        public Person() {  
            super();  
        }  
      
        public Person(String name, int age, boolean male, Address address) {  
            super();  
            this.name = name;  
            this.age = age;  
            this.male = male;  
            this.address = address;  
        }  
      
        public String getName() {  
            return name;  
        }  
      
        public void setName(String name) {  
            this.name = name;  
        }  
      
        public int getAge() {  
            return age;  
        }  
      
        public void setAge(int age) {  
            this.age = age;  
        }  
      
        public boolean isMale() {  
            return male;  
        }  
      
        public void setMale(boolean male) {  
            this.male = male;  
        }  
      
        public Address getAddress() {  
            return address;  
        }  
      
        public void setAddress(Address address) {  
            this.address = address;  
        }  
      
        @Override  
        public String toString() {  
            return "Person [name=" + name + ", age=" + age + ", male=" + male  
                    + ", address=" + address + "]";  
        }  
      
    }  

 

    JSONObject jsonObject = new JSONObject(json);  
    String name = jsonObject.getString("name");  
    int age = jsonObject.getInt("age");  
    boolean male = jsonObject.getBoolean("male");  
    JSONObject addressJSON = jsonObject.getJSONObject("address");  
    String street = addressJSON.getString("street");  
    String city = addressJSON.getString("city");  
    String country = addressJSON.getString("country");  
    Address address = new Address(street, city, country);  
    Person person = new Person(name, age, male, address);  
    System.out.println(person);  

 

LogCat的输出为Person [name=coolxing, age=24, male=true, address=Address [street=huiLongGuan, city=beijing, country=china]], 说明已经正确解析了JSON对象.

 

2. 采用gson库解析JSON对象. 假设带解析的JSON数据是json = "{\"name\":\"coolxing\", \"age\"=24, \"male\":true, \"address\":{\"street\":\"huiLongGuan\", \"city\":\"beijing\", \"country\":\"china\"}}", 首先需要到http://code.google.com/p/google-gson/ 下载jar包, 并将其添加到项目中. 具体的解析代码如下:

 

    Gson gson = new Gson();  
    Person person = gson.fromJson(json, Person.class);  
    System.out.println(person);  

 

LogCat的输出为Person [name=coolxing, age=24, male=true, address=Address [street=huiLongGuan, city=beijing, country=china]], 说明已经正确解析了JSON对象, 是不是很简单?

 

3. 采用android内置的org.json包解析JSON数组. 假设待解析的JSON数据为json = "[{\"name\":\"coolxing\", \"age\"=24, \"male\":true, \"address\":{\"street\":\"huiLongGuan\", \"city\":\"beijing\", \"country\":\"china\"}}, {\"name\":\"min\", \"age\"=20, \"male\":false, \"address\":{\"street\":\"heiShiJiao\", \"city\":\"daLian\", \"country\":\"china\"}}]", 解析代码如下:

    List<Person> persons = new ArrayList<Person>();  
    JSONArray jsonArray = new JSONArray(json);  
    for(int i = 0; i < jsonArray.length(); i++) {  
        JSONObject jsonObject = jsonArray.getJSONObject(i);  
        String name = jsonObject.getString("name");  
        int age = jsonObject.getInt("age");  
        boolean male = jsonObject.getBoolean("male");  
        JSONObject addressJSON = jsonObject.getJSONObject("address");  
        String street = addressJSON.getString("street");  
        String city = addressJSON.getString("city");  
        String country = addressJSON.getString("country");  
        Address address = new Address(street, city, country);  
        Person person = new Person(name, age, male, address);  
        persons.add(person);  
    }  
    System.out.println(persons);  

 

LogCat的输出为[Person [name=coolxing, age=24, male=true, address=Address [street=huiLongGuan, city=beijing, country=china]], Person [name=min, age=20, male=false, address=Address [street=heiShiJiao, city=daLian, country=china]]], 说明已经正确解析了JSON数组.

 

4. 采用gson库解析JSON数组. 待解析的JSON数据同上, 具体代码为:

Gson gson = new Gson();  
Type listType = new TypeToken<List<Person>>(){}.getType();  
List<Person> persons = gson.fromJson(json, listType); 

 

LogCat的输出为[Person [name=coolxing, age=24, male=true, address=Address [street=huiLongGuan, city=beijing, country=china]], Person [name=min, age=20, male=false, address=Address [street=heiShiJiao, city=daLian, country=china]]], 说明已经正确解析了JSON数组.
new  TypeToken<List<Person>>(){}.getType(); 这句代码表示创建一个 TypeToken的匿名子类对象, 并调用对象的getType()方法.
 
org.json包和gson库还有很多其他有用的API, 需要的时候可查看文档. 比如有的时候需要通过java对象或java集合和数组生成json数据上传给服务器, 当然你可以自我构造json字符串, 但会很麻烦. 这个时候就可以使用其中的有关API, 方便的完成这项工作.
分享到:
评论

相关推荐

    Android 实用的数据json数据解析封装类

    本篇文章将详细介绍如何创建一个实用的JSON数据解析封装类,以便快速有效地处理各种形式的JSON数据。 首先,我们需要引入一个JSON库,Android SDK本身包含了org.json库,但为了更强大的功能和更好的性能,推荐使用...

    json数据解析json数据解析

    json数据解析

    Android_JSON数据解析

    本篇将详细讲解如何在Android应用中解析JSON数据,主要涉及以下几个方面: 1. JSON基本结构 JSON由两种基本结构构成:对象(Object)和数组(Array)。对象是以花括号 `{}` 包围的键值对集合,键用双引号括起,如`...

    json数据解析源码

    总的来说,这个“json数据解析源码”项目涵盖了从获取到解析JSON数据,再到对数据进行操作和输出的整个流程。在实际应用中,根据具体需求,可能还需要处理错误、验证数据格式、优化性能等方面的问题。理解并掌握这些...

    json 数据解析包

    标题提到的“json 数据解析包”是一组Java库,它们可以帮助开发者在Java环境中解析和操作JSON数据。以下是这些库的详细介绍: 1. **commons-collections-3.2.jar**:Apache Commons Collections是Apache软件基金会...

    基于python+pyqt+paho.mqtt 的MQTT客户端实现及json数据解析

    基于python+pyqt+paho.mqtt 的MQTT客户端实现及json数据解析 基于python+pyqt+paho.mqtt 的MQTT客户端实现及json数据解析 基于python+pyqt+paho.mqtt 的MQTT客户端实现及json数据解析 基于python+pyqt+paho.mqtt 的...

    基于Newtonsoft.Json实现Json数据解析和封装

    Newtonsoft.Json已经足够强大,易用性也没得说。但是在使用过程中存在着一个问题,如果数据不存在...JsonObject类和JsonArray类可以相互嵌套,支持原生类的JsonPath检索能力,满足Json数据解析和Json数据封装常见需求。

    Android中Json数据解析

    本教程将深入探讨在Android中如何解析和处理JSON数据。 首先,我们需要理解JSON的基本结构。JSON是一种基于键值对的数据表示方式,主要由对象(Object)和数组(Array)构成。对象用花括号 `{}` 包裹,键值对以冒号...

    奇葩json 数据 解析

    这个话题“奇葩json数据解析”就聚焦于如何处理那些不符合标准的JSON数据。 在描述中提到,使用AFNetworking(简称AFN)进行POST请求时遇到了一个问题:返回的数据不是标准的JSON格式,导致解析失败。AFNetworking...

    基于python+pyqt+paho.mqtt 的MQTT客户端实现及json数据解析(源码),开箱即用

    基于python+pyqt+paho.mqtt 的MQTT客户端实现及json数据解析(源码),开箱即用! 基于python+pyqt+paho.mqtt 的MQTT客户端实现及json数据解析(源码),开箱即用! 基于python+pyqt+paho.mqtt 的MQTT客户端实现及...

    Json数据解析包

    在标题"Json数据解析包"中,我们可以理解为这是一个专门用于解析和处理JSON格式数据的工具包。在实际的编程工作中,解析JSON数据是相当常见的需求,例如从服务器获取响应数据、读取配置文件或者存储轻量级的数据结构...

    android中JSON数据解析

    在Android开发中,JSON...总的来说,Android中的JSON数据解析是通过理解JSON结构,结合`org.json`库或Gson库,以及适当的网络请求库来实现的。合理使用这些工具,能有效地处理和展示从服务器获取的JSON数据。

    HttpURLConnection获取json数据解析

    **二、JSON数据解析** JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在Java中,可以使用`org.json`库来解析JSON数据。 1. **导入JSON库**:在...

    IOS之JSON数据解析

    本文将深入探讨如何在iOS中解析JSON数据,以“IOS之JSON数据解析”为主题,结合标签“源码”和“工具”,我们将讨论如何使用SBJson框架进行JSON的解析。 首先,JSON是一种轻量级的、易于人阅读和编写的数据格式,...

    【cJSON】JSON数据解析

    cJSON是一个轻量级的C语言JSON数据解析库,它提供了一种方便的方式来处理JSON格式的数据,包括将JSON文本解析成C语言中的结构体,并将结构体转换回JSON文本。JSON,即JavaScript对象表示法,是一种轻量级的数据交换...

    Json数据解析工程

    在这个"Json数据解析工程"中,重点是理解如何在Java中使用Gson库进行JSON数据的解析。 Gson是Google开发的一个Java库,它能将Java对象转换为JSON字符串,反之亦然。Gson库的强大之处在于其灵活性和自动化处理,使得...

    Json数据解析服务器端加客户端代码

    在这个“Json数据解析服务器端加客户端代码”中,我们可以预见到包含的是关于如何在服务器端和客户端处理JSON数据的代码示例。 在服务器端,JSON数据通常用于接收来自客户端的请求数据,或者作为响应发送回给客户端...

    JSON数据解析后显示在listview上并且可上滑加载更多

    适合新手参考,简单实用,因为我也是新手,所以用的都是比较基础的方法实现。...okhttp方法获取服务器JSON数据或者获取本地android studio内的txt文本解析,然后显示在listview上,listview增加了上滑加载更多的功能

    android针对json数据解析方法实例分析

    以下是一个简单的Android JSON数据解析和构造的示例: ```java try { JSONObject person = new JSONObject(); person.put("name", "John Doe"); person.put("age", 30); JSONArray hobbies = new JSONArray();...

    HTTP得到JSON数据解析在Listview

    在给定的标题"HTTP得到JSON数据解析在Listview"中,我们可以推断开发者正在尝试从"http://m.weather.com.cn/data/101010200.html"这个URL获取天气预报数据。这个URL返回的很可能是JSON格式的天气信息,比如温度、...

Global site tag (gtag.js) - Google Analytics