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重写对应的方法,才能实现指定格式的输出。

java生成Json工具之JsonSimple的使用的更多相关文章

  1. Java中json工具对比分析

    Java中几个json工具分析 1, 环境 JDK1.6+IDE(IntelliJ IDEA)+windowsXP+GBK编码 2,分析对象 jackson1.8.2 http://jackson.c ...

  2. [Java学习] JSON工具学习记录--FastJSON

    最近做项目,总是与json打交道,在用了即可json工具后,个人认为fastJson最好用,很方便,API也清晰可见,所以记录下使用方法,给需要的人提供帮助.(部分摘抄自网络) 一.API入口 Fas ...

  3. java生成条形码工具类

    package com.runtime.extend.utils.CodeCreate;import java.awt.Color;import java.awt.Font;import java.a ...

  4. java生成json字符串的方法

    例1:将map对象添加一次元素(包括字符串对.数组),转换成json对象一次. 代码: package com.json; //这是使用org.json的程序: import java.util.Ha ...

  5. Java生成json

    JSON(JavaScript Object Notation):一种轻量级的数据交换格式: Be JSON:在线JSON校验格式化工具 www.bejson.com 需求:编写代码生成如下的json ...

  6. jsp传给java属性,java生成json串,方便以后取出来

    前台代码 $.ajax({ url : '<%=basePath%>userorderother/canUpdateCust.do', type : 'POST', data: {'kdc ...

  7. 强大的json工具:fastJson

    fastJson   FastJSON是一个很好的java开源json工具类库,相比其他同类的json类库,它的速度的确是fast,最快!但是文档做得不好,在应用前不得不亲测一些功能.   实际上其他 ...

  8. 在JAVA中使用JSONObject生成json

    JSON是一种轻量级的数据交换格式,在现在的web开发中,是非常常见的.在没有方便的工具之前,我们或许会使用拼字符串的形式来生成json数组,今天我们使用一个json-lib.jar包来为我们实现生成 ...

  9. json工具性能比较:json-lib和jackson进行Java对象到json字符串序列化[转]

    网上查找“java json”,发现大家使用最多的还是json-lib来进行java对象的序列化成json对象和反序列化成java对象的操作.但是之前在网上也看到过一往篇关于json序列化性能比较的文 ...

随机推荐

  1. js转换/Date(........)/

    eval('new ' + (datetime.replace(/\//g, ''))); 好记性不如烂笔头,记下以备后用.

  2. 入门1:PHP的优点

    一.语法简单 二.学习成本低 (因为语法简单 所以学习成本低) 三.开发效率高 (PHP运行流程很简单,语法也很简单,必然开发效率就高) 四.跨平台 (我们只需要写一份PHP的程序,就可以非常方便的把 ...

  3. ubuntu 实现界面切换

    1.按ALT+CTRL+F1切换到字符界面(Linux实体机) 如果是VMware虚拟机安装的Linux系统,则切换到字符界面的时候需要以下操作 按下ALT+CTRL+SPACE(空格),ALT+CT ...

  4. how to make choices about girls?

    yb ldge nvhl, yige hf csmn, hv bmig, hv zofj, hfyb uhjnxn;ldyige ybdm bfbfde, gjjt hf djip, djui hfk ...

  5. sdk manager更新失败,显示Download interrupted: read timed out,应该如何解决?

    今天开始第一天学习Android,就遇到一个大问题.sdk manager无法自动更新,总在提示超时!!! 经过网上查询发现问题原因是. 在利用android sdk manager更新时失败,具体情 ...

  6. 转:windows下使用gvim搭建简单的IDE编译环境(支持C/C++/Python等)

    原文来自于:http://www.cnblogs.com/zhuyp1015/archive/2012/06/16/2552269.html 使用gvim在windows环境下搭建简单的IDE环境可以 ...

  7. mapreduce (六) MapReduce实现去重 NullWritable的使用

    习题来源:http://www.cnblogs.com/xia520pi/archive/2012/06/04/2534533.htmlfile1 2012-3-1 a 2012-3-2 b 2012 ...

  8. [BZOJ - 2463] [中山市选2009] 谁能赢呢?【“博弈论”】

    题目链接:BZOJ - 2463 题目分析 这道题的题解是,由于两人都采取最优策略,所以最后一定所有格子都会被走到.(Why..表示不懂..哪位神犇可以给我讲一下QAQ) Upd:半群的神犇告诉我,并 ...

  9. 获得进程可执行文件的路径: GetModuleFileNameEx, GetProcessImageFileName, QueryFullProcessImageName

    http://blog.csdn.net/bichenggui/article/details/4774457 -------------------------------------------- ...

  10. table 的边框变细

    table { border-width: 0px 0px 1px 1px; border-style:solid;border-color:black} td { border-width: 1px ...