JSON的四种类型的手动解析方式

本文介绍了JSON的基本概念,包括其作为数据结构的简洁性和高效性,并详细阐述了如何手动将其解析为Java对象,包括从单个对象到对象集合,再到复杂和特殊类型的JSON数据的解析方法。
摘要由CSDN通过智能技术生成

一、什么是JSON?

JSON是一种取代XML的数据结构,和xml相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少更多流量从而加快速度。JSON就是一串字符串 只不过元素会使用特定的符号标注。

{} 双括号表示对象
[] 中括号表示数组
“”双引号内是属性或值
:冒号表示后者是前者的值(这个值可以是字符串、数字、也可以是另一个数组或对象)

所以 {“name”: “八戒”} 可以理解为是一个包含name为Michael的对象
而[{“name”: “猴哥”},{“name”: “八戒”}]就表示包含两个对象的数组
当然了,你也可以使用{“name”:[“Michael”,”Jerry”]}来简化上面一部,这是一个拥有一个name数组的对象

这里写图片描述

解析分三个步骤:
1.获取数据或者创建数据
2.解析数据
3.显示到控件上去

第一种手动解析类型:将json格式的字符串{}转换为java对象(如下图)

这里写图片描述

jsonToJavaObjectByNative.java

 private void jsonToJavaObjectByNative() {
        //获取或者创建json数据
        String json = "{\n" +
                "    \"id\":2,\n" +
                "    \"name\":\"猴哥\",\n" +
                "    \"price\":12.3,\n" +
                "     \"imgPath\":\"http://img00.hc360.com/cloth/201206/201206191116426249.jpg\"\n" +
                "\n" +
                "}";
        users users = null;
        //解析json(getXXX或者optXXX都可以,最好使用optXXX,getXXX容易报空指针)
        try {
            JSONObject jsonObject = new JSONObject(json);

            //String id1 = jsonObject.getString("id");
            int id = jsonObject.optInt("id");
            String name = jsonObject.getString("name");
            double price = jsonObject.optDouble("price");
            String imgPath = jsonObject.optString("imgPath");

            //封装实体类
            users = new users(id, name, price, imgPath);


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

        //显示json
        mtest01.setText("原始json数据:"+json);//原始
        mtest02.setText("解析后:"+users.toString());//解析后

    }
可以使用GsonFormat工具快速生成该类
package com.example.myzg2.json.bean;

/**
 * Created by Myzg2 on 2017/7/29.
 */

public class users {
   
    public users(int id, String name, double price, String imgPath) {
        this.id = id;
        this.name = name;
        this.price = price;
        this.imgPath = imgPath;
    }

    public users() {
    }

    @Override
    public String toString() {
        return "users{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", price=" + price +
                ", imgPath='" + imgPath + '\'' +
                '}';
    }

    /**
     * id : 2
     * name : 猴哥
     * price : 12.3
     * imgPath : http://img00.hc360.com/cloth/201206/201206191116426249.jpg
     */

    private int id;
    private String name;
    private double price;
    private String imgPath;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public String getImgPath() {
        return imgPath;
    }

    public void setImgPath(String imgPath) {
        this.imgPath = imgPath;
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值