gson如何解析json字符串?Gson解析单个Json对象方法

阳光 2021-08-05 17:33:43 java常见问答 8376

Json是一种数据格式,便于数据传输、存储、交换,Gson是一种组件库,可以把java对象数据转换成json数据格式。那gson如何解析json字符串?下面来我们就来给大家讲解一下。

1.数据

assets / Json01
{
    "id": 100
    , "body": "It is my post"
    , "number": 0.13
    , "created_at": "2014-05-22 19:12:38"
}

2.载入数据

因为这个数据是定义在本地的,所以要先加载到内存中。方法是通过getAssets()得到AssetManager对象,再通过open(文件名)来获得文件流。这里因为我能确保本地的文件小于1m,所以就没做循环读取,实际中请务必用循环读取的方式。最终得到的数据存放在strData中。

/**
* @description 通过assets文件获取json数据,这里写的十分简单,没做循环判断。
*
* @return Json数据(String)
*/
private String getStrFromAssets(String name)
{
    String strData = null;
    try
    {
        InputStream inputStream = getAssets()
            .open(name);
        byte buf[] = new byte[1024];
        inputStream.read(buf);
        strData = new String(buf);
        strData = strData.trim();
    }
    catch (IOException e)
    {
        // TODO 自动生成的 catch 块
        e.printStackTrace();
    }
    System.out.println("strData = " + strData);
    return strData;
}

3.建立类

首先,我们要根据数据的格式定义一个类

public class Foo01
{
    public int id;
    public String body;
    public float number;
    public String created_at;
}

这个类的定义方式有讲究:

1>类里面的成员变量名必须跟Json字段里面的name是一模一样的:

"id": 100, ---- public int id;

2>如果Json数据是嵌套定义的,那么这个类中就的成员变量肯定有个类对象,一般这个类包含内部类

{
    "id": 100
    , "body": "It is my post"
    , "number": 0.13
    , "created_at": "2014-05-22 19:12:38"
    , "childFoo":
    {
        "id": 200
        , "name": "jack"
    }
}
public class Foo02
{
    private int id;
    private String body;
    private float number;
    @SerializedName("created_at")
    private Date createdAt; // 通过注释的方式更换名字,同时保证使用方式不变。
}

4.开始解析

/**
* @description 将json数据解析为类对象
*/
private void GsonTest01()
{
    Foo01 foo = new Gson()
        .fromJson(getStrFromAssets("Json01"), Foo01.class);
    System.out.println("id = " + foo.id);
}

5.结果

gson如何解析json字符串?Gson解析单个Json对象方法.JPG

Gson解析单个Json对象就是以上这些步骤,Gson可以把java对象数据转换成json数据格式,这对于开发人员来说一定要熟练操作!最后大家如果想要了解更多json相关知识,敬请关注奇Q工具网。

推荐阅读:

Jcreator怎么使用?Jcreator使用技巧

java中怎么创建泛型方法?java泛型有什么优点?

java中接口可以实例化吗?为什么不能实例化?