java构造与解析json数据

本文介绍了JSON数据格式及其在Java中的构造与解析方法。利用org.json库,演示了如何将JSON字符串转换为Java对象,并提供了通过不同方式构建JSON数据的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java构造与解析json数据

一、介绍

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。

json具有很多种形式,例如:

对象(object 是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。

object

想要了解更多信息,请查看json.org,官网上还有各种语言的json数据的实现方式。

二、依赖的jar包

org.json

下载地址:http://mvnrepository.com/artifact/org.json/json

添加maven依赖:

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20160810</version>
</dependency>

三、json构造与解析方法实现

由于json不能直接转换成javaBean,笔者写了一个工具类通过map转换成javaBean,实现javaBean、map与json的相互转换。

代码如下:

package main;


import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Map;

/**
 * Created by asus on 2016/12/22.
 * 将map对象转化成javaBean对象
 */
public class BeanUtils {
    /**
     * 将map对象转化成javaBean对象
     *
     * @param map   map对象
     * @param clazz javabean的Class类对象
     * @param <T>   泛型
     * @return javabean对象
     */
    public static <T> T toBean(Map<String, Object> map, Class<T> clazz) {
        try {
            T bean = clazz.newInstance();
            Field[] fields = clazz.getDeclaredFields();
            //在map中查找类的字段对应的值,再赋值给bean对象
            for (Field field : fields) {
                if (map.get(field.getName()) != null) {
                    //私有变量需要设置访问属性为true
                    field.setAccessible(true); 
                    field.set(bean, map.get(field.getName()));
                }
            }
            return bean;
        } catch (InstantiationException | IllegalAccessException e) {
            e.printStackTrace();
        }
        return null;

    }
}

演示样例:

package main;

package top.codesky.test

/**
 * Created by asus on 2016/12/22.
 * javaBean类
 * 由Kotlin语言编写,兼容java
 * 明显的减少代码量
 */
class Student {
    var id: Int = 0
    var name: String? = null
    var major: String? = null

    override fun toString(): String {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", major='" + major + '\'' +
                '}'
    }
}
package main;

import org.json.JSONArray;
import org.json.JSONObject;
import org.json.JSONStringer;
import org.junit.Test;

/**
 * Created by asus on 2016/12/21.
 * 测试类
 */
public class TestJson {
    /**
     * 解析json数据
     */
    @Test
    public void parseJson() {
        //json数据字符串
        String jsonString = "{'map':[{'name':'张三', 'age':21, 'major':'计算机'}," +
                "{'name':'李四', 'age':20, 'major':'软件工程'}]}";
        JSONObject jsonObject = new JSONObject(jsonString);
        JSONArray jsonArray = jsonObject.getJSONArray("map");
        System.out.println("---------JSONArray数据格式---------");
        System.out.println(jsonArray);
        JSONObject jo = jsonArray.getJSONObject(0);
        System.out.println("---------解析JSON数据---------");
        System.out.println("name:" + jo.getString("name") + " age:" + jo.getInt("age")
                +" major:"+jo.getString("major"));

    }

    /**
     * 构造json数据
     */
    @Test
    public void createJson() {
        //1.通过JSONObject方式创建
        JSONObject studentJson = new JSONObject();
        studentJson.put("name", "jack");
        studentJson.put("id", 20161222);
        studentJson.put("major", "计算机");
        System.out.println("---------JSONObject------------");
        System.out.println(studentJson);
        //json通过map转化成javaBean对象
        Student student = BeanUtils.toBean(studentJson.toMap(),Student.class);
        System.out.println("---------toJavaBean------------");
        System.out.println(student);
        //2.通过JSONStringer创建
        JSONStringer jsonStringer = new JSONStringer();
        //开始创建JSONObject
        jsonStringer.object();
        jsonStringer.key("name");
        jsonStringer.value("jack");
        jsonStringer.key("id");
        jsonStringer.value(20161222);
        jsonStringer.key("major");
        jsonStringer.value("计算机");
        jsonStringer.endObject();
        System.out.println("---------JSONStringer------------");
        System.out.println(jsonStringer.toString());
    }


}

运行结果:

  • 解析json数据

parseJson

  • 构造json数据

createJson

这里可以发现用JSONStringer构造的json数据是有序的,
而JSONObject构造的是无序的。


四、总结分析

org.json是一个轻量级的json解析jar,不依赖其他第三方jar,但是不能直接转换成
javaBean对象,需要通过map进行中转。还有很多种解析方法,有时间再尝试一番。
当然适合需求的才是最好的。

google也把org.json集成到了android sdk中,开发安卓应用的时候可以直接使用了。

OverView:
google

参考博客

http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/24/3096437.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值