文档章节

java生成Json工具之JsonSimple的使用

JavaSwing
 JavaSwing
发布于 2016/11/29 11:09
字数 1053
阅读 42
收藏 0

json-simple是由是Google开发的Java JSON解析框架,基于Apache协议。目前版本为1.1

项目主页:https://code.google.com/p/json-simple/#JSON.simple_in_Publications

Java实体类和JSON对象之间的映射如下表:

JSON Java
string java.lang.String
number java.lang.Number
true|false java.lang.Boolean
null null
array java.util.List
object java.util.Map

从此表中我们可以看出,当解析json对象映射到java实体类时,是从左边到右边。从左边到右边是Java实体类到json字符。在编码时默认的JSONArray是继承了ArrayList实现了List接口,JSONObject是继承了HashMap实现 了Map接口。jsonsimple默认的只支持表中的几种类型转换为json如果是一个复杂的对象要转换成Json字符,该类要实现JSONAware接口或者是JSONStreamAware。实现了以上两个接口后必须要重写toJSONString()或者writeJSONString()。来输出json字符。

好了,话不多说,看例子吧!

  • Example 1-1 - Encode a JSON object
       // 是java中HashMap的子类
        JSONObject json = new JSONObject();
        json.put("name", "张晓天");
        json.put("boolean", true);
        json.put("null", null);
        json.put("num", 7);
        json.put("double", 34.5);
        printJson(json.toJSONString());
        // {"num":7,"name":"张晓天","boolean":true,"double":34.5,"null":null}
  • Example 1-2 - Encode a JSON object – Streaming
JSONObject obj = new JSONObject();
        obj.put("name", "foo");
        obj.put("num", new Integer(100));
        obj.put("balance", new Double(1000.21));
        obj.put("is_vip", new Boolean(true));
        obj.put("nickname", null);
        StringWriter out = new StringWriter();
        try {
            obj.writeJSONString(out);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        String jsonText = out.toString();
        printJson(jsonText);
        // {"balance":1000.21,"num":100,"nickname":null,"is_vip":true,"name":"foo"}
  • Example 2-1 - Encode a JSON array
JSONArray list = new JSONArray();
        list.add("foot");
        list.add("张晓天");
        list.add(false);
        list.add(6.9);
        list.add(7);
        list.add(null);
        printJson(list.toJSONString());
        // ["foot","张晓天",false,6.9,7,null]
  • Example 2-2 - Encode a JSON array - Using List
List list = new LinkedList<>();
        list.add("foot");
        list.add("张晓天");
        list.add(false);
        list.add(6.9);
        list.add(7);
        list.add(null);
        String jsonText = JSONValue.toJSONString(list);
        printJson(jsonText);
        // ["foot","张晓天",false,6.9,7,null]
  • Example 2-3- Encode a JSON array - Using List and streaming
LinkedList list = new LinkedList();
        list.add("张晓天");
        list.add(100);
        list.add(1000.21);
        list.add(true);
        list.add(null);
        StringWriter out = new StringWriter();
        try {
            JSONValue.writeJSONString(list, out);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        String jsonText = out.toString();
        printJson(jsonText);
        // ["张晓天",100,1000.21,true,null]
  • Example 3 - Merge two JSON objects
JSONObject json1 = new JSONObject();
        json1.put("name", "json1");
        json1.put("age", 3);
        json1.put("balance", 3.8);

        JSONObject json2 = new JSONObject();
        json2.put("is_vip", "是");
        json2.put("nickname", null);
        json2.put("num", 8.9);
        json2.putAll(json1); // 注意两个对象的key不能一样,否则会替换
        printJson(json2.toJSONString());
        // {"balance":3.8,"num":8.9,"nickname":null,"is_vip":"是","name":"json1","age":3}
  • Example 4 - Merge two JSON arrays
JSONArray list1 = new JSONArray();
        list1.add("foo");
        list1.add(new Integer(100));
        list1.add(new Double(1000.21));

        JSONArray list2 = new JSONArray();
        list2.add(new Boolean(true));
        list2.add(null);

        JSONObject obj = new JSONObject();
        obj.put("name", "foo");
        obj.put("num", new Integer(100));
        obj.put("balance", new Double(1000.21));
        obj.put("is_vip", new Boolean(true));
        obj.put("nickname", null);

        obj.put("list1", list1);
        obj.put("list2", list2);
        printJson(obj.toJSONString());

        // {"balance":1000.21,"list2":[true,null],"num":100,"list1":["foo",100,1000.21],"nickname":null,"is_vip":true,"name":"foo"}
  • Example 5-1 - Combination of JSON primitives, Map and List
Map m1 = new LinkedHashMap();
        Map m2 = new HashMap();
        List l1 = new LinkedList();

        m1.put("one", "第一值");
        m1.put("two", "第二个值");
        m2.put("k1", "m2-k1");
        m2.put("k2", "m2-k2");

        l1.add(m1);
        l1.add(m2);
        String json = JSONValue.toJSONString(l1);
        printJson(json);
        // [{"one":"第一值","two":"第二个值"},{"k1":"m2-k1","k2":"m2-k2"}]
  • Example 5-2 - Combination of JSON primitives, JSONObject, Map and List, and streaming
StringWriter out = new StringWriter();
        JSONObject obj = new JSONObject();
        LinkedHashMap m1 = new LinkedHashMap();
        LinkedList l1 = new LinkedList();
        obj.put("k1", "v1");
        obj.put("k2", m1);
        obj.put("k3", l1);
        m1.put("mk1", "mv1");
        l1.add("lv1");
        l1.add("lv2");
        m1.put("mk2", l1);
        try {
            obj.writeJSONString(out);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("jsonString:");
        System.out.println(out.toString());
        String jsonString = obj.toJSONString();
        System.out.println(jsonString);
  • Example 6 - Customize JSON outputs
JSONArray users = new JSONArray();
        users.add(new User(123, "zxd", "zxd"));
        users.add(new User(124, "ksks", "ksk"));
        users.add(new User(125, "\"foo2\"", "secret2"));
        printJson(users.toJSONString());
        // [{userName:"zxd",ID:123},{userName:"ksks",ID:124},{userName:"\"foo2\"",ID:125}]
JSONArray users = new JSONArray();
        users.add(new User(123, "foo1", "secret1"));
        users.add(new User(124, "foo2", "secret2"));
        users.add(new User(125, "\"foo2\"", "secret2"));
        StringWriter out = new StringWriter();
        try {
            users.writeJSONString(out);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        printJson(out.toString());
        
        //[{userName:"foo1",ID:123},{userName:"foo2",ID:124},{userName:"\"foo2\"",ID:125}]
class User implements JSONAware {
    private int id;
    private String name;
    private String password;

    public User(int id, String name, String password) {
        this.id = id;
        this.name = name;
        this.password = password;
    }

    public String toJSONString() {
        StringBuffer sb = new StringBuffer();

        sb.append("{");

        sb.append(JSONObject.escape("userName"));
        sb.append(":");
        sb.append("\"" + JSONObject.escape(name) + "\"");

        sb.append(",");

        sb.append(JSONObject.escape("ID"));
        sb.append(":");
        sb.append(id);

        sb.append("}");
        // 也可以这样写
        /*
         * JSONObject obj = new JSONObject(); obj.put("userName", name);
         * obj.put("ID", new Integer(id)); return obj.toString();
         */
        return sb.toString();

    }

    public void writeJSONString(Writer out) throws IOException {
        LinkedHashMap obj = new LinkedHashMap();
        obj.put("userName", name);
        obj.put("ID", new Integer(id));
        JSONValue.writeJSONString(obj, out);
    }
}
 

如果你使用了maven来创建项目也可在pom中添加以下依赖:

<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1.1</version>

</dependency>

总结:jsonsimple对于简单转换成json对象,但是对于 比较复杂的对象就不太好了,复杂的对象都要实现JSONAware重写对应的方法,才能实现指定格式的输出。

本文转载自:http://www.cnblogs.com/zxdBlog/p/3760765.html

JavaSwing
粉丝 21
博文 44
码字总数 8095
作品 0
杭州
程序员
私信 提问
Gradle入门系列(二)——groovy高级语法

groovy高级语法 一、json操作 使用groovy自带的json工具进行json操作 groovy.json.JsonSlurper:将json原数据转成实体对象 groovy.json.JsonOutput:将实体对象转成json数据 groovy是完全兼容...

GitLqr
01/05
0
0
那些提升开发人员工作效率的在线工具

点击上方“程序员小灰”,选择“置顶公众号” 有趣有内涵的文章第一时间送达! 本文转载自公众号 Hollis 作为一个Java开发人员,经常要和各种各样的工具打交道,除了我们常用的IDE工具以外,...

bjweimengshu
2018/04/18
0
0
calvinwilliams/sqlaction

sqlaction - 自动生成JDBC代码的数据库持久层工具 1. 概述 2. 一个DEMO 2.1. 建表DDL 2.2. 新建JAVA项目 2.3. 在包目录中执行工具 2.4. 到目前为止,一行JAVA代码都没写,现在开始写应用代码...

calvinwilliams
04/18
0
0
如何从JSON数据创建Java类

Hi, 经常在写API文档,需要根据API文档中定义的JSON对象在项目中编写对应的JAVA对象,由于有的JSON属性很多,又是多层嵌套所以一个个手写JAVA的属性很麻烦,想问大家如何快速根据JSON生成JAV...

Kent_Chen
2014/08/04
1K
4
今天看到这个,说得有点玄,感到很意外

不是说不信有这么好的json工具,还真没遇见过,特别方便的 介绍光说了 java对象转json, 那json转java对象呢? 比如 User类里有个contact属性是Context类型,能转换成java对象?,怎么设置类...

azheng
2011/03/08
1K
4

没有更多内容

加载失败,请刷新页面

加载更多

SSH安全加强两步走

从 OpenSSH 6.2 开始已经支持 SSH 多因素认证,本文就来讲讲如何在 OpenSSH 下启用该特性。 OpenSSH 6.2 以后的版本多了一个配置项 AuthenticationMethods。该配置项可以让 OpenSSH 同时指定...

xiangyunyan
28分钟前
4
0
C或C++不是C/C++

http://www.voidcn.com/article/p-mucdruqa-ws.html

shzwork
今天
6
0
OSChina 周六乱弹 —— 如何将梳子卖给和尚

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @for_ :划水五分钟,专注两小时。分享Various Artists的单曲《贝多芬第8号钢琴奏鸣曲悲伤的第三乐章》: 《贝多芬第8号钢琴奏鸣曲悲伤的第三乐...

小小编辑
今天
179
8
ES5

什么是ES5:比普通js运行要求更加严格的模式 为什么:js语言本身有很多广受诟病的缺陷 如何:在当前作用域的顶部添加:"use strict" 要求: 1、禁止给未声明的变量赋值 2、静默失败升级为错误...

wytao1995
今天
7
0
c++ 内联函数调用快的原因

见图片分析

天王盖地虎626
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部