json的认识及对json数据的相互转化
Json 和 Jsonlib 的使用
- 什么是 Json
JSON(JvaScript Object Notation)(官网网站:http://www.json.org/)是 一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。它基于 JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999 的一个子集。 JSON 采用完全独立于语言的文本格式,但是也使用了类似于 C 语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使 JSON 成为理想的数据交换语言。
- JSON 的两种结构
1.“名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表 (hash table),有键列表(keyed list),或者关联数组 (associative array)。 在 Java 语言中,我们可以将它理解成 HashMap。
对象是一个无序的"'名称/值'对"集合。一个对象以"{"(左括号)开始,"}"(右括号)结束。每个“名称”后跟一个":"(冒号);"'名称/值' 对"之间使用","(逗号)分隔。
示例:var json = {"name":"Jack","age":90,"Marray":true};

2. 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(Array 或 List)。
数组是值(value)的有序集合。一个数组以"["(左中括号)开始,"]"(右中括号)结束。值之间使用","(逗号)分隔。
示例:var json = ["Jack","Rose","Tom",89,true,false];

- Json-lib
Json-lib 是一个 Java 类库(官网:http://json-lib.sourceforge.net/)可以实现如下功能:
- 转换 javabeans, maps, collections, java arrays 和 XML 成为 json 格式数据
- 转换 json 格式数据成为 javabeans 对象
Json-lib 需要的 jar 包
- commons-beanutils-1.8.3.jar
- commons-collections-3.2.1.jar
- commons-lang-2.6.jar
- commons-logging-1.1.1.jar
- ezmorph-1.0.6.jar
- json-lib-2.4-jdk15.jar
- Json-lib 的使用
1. 将 Array 解析成 Json 串。使用 JSONArray 可以解析 Array 类型:


package cn.sunzn.json; import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set; import net.sf.json.JSONArray; public class JsonLib {
public static void main(String[] args) {
/**
* 将 Array 解析成 Json 串
*/
String[] str = { "Jack", "Tom", "90", "true" };
JSONArray json = JSONArray.fromObject(str);
System.err.println(json); /**
* 对像数组,注意数字和布而值
*/
Object[] o = { "北京", "上海", 89, true, 90.87 };
json = JSONArray.fromObject(o);
System.err.println(json); /**
* 使用集合类
*/
List<String> list = new ArrayList<String>();
list.add("Jack");
list.add("Rose");
json = JSONArray.fromObject(list);
System.err.println(json); /**
* 使用 set 集
*/
Set<Object> set = new HashSet<Object>();
set.add("Hello");
set.add(true);
set.add(99);
json = JSONArray.fromObject(set);
System.err.println(json);
}
}


运行结果如下:
["Jack","Tom","90","true"]
["北京","上海",89,true,90.87]
["Jack","Rose"]
[99,true,"Hello"]
2. 将 JavaBean/Map 解析成 JSON 串。 使用JSONObject 解析:


package cn.sunzn.json; import java.util.HashMap;
import java.util.Map; import net.sf.json.JSONObject; public class JsonLib {
@SuppressWarnings("static-access")
public static void main(String[] args) {
/**
* 解析 HashMap
*/
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", "Tom");
map.put("age", 33);
JSONObject jsonObject = JSONObject.fromObject(map);
System.out.println(jsonObject); /**
* 解析 JavaBean
*/
Person person = new Person("A001", "Jack");
jsonObject = jsonObject.fromObject(person);
System.out.println(jsonObject); /**
* 解析嵌套的对象
*/
map.put("person", person);
jsonObject = jsonObject.fromObject(map);
System.out.println(jsonObject);
}
}


运行结果如下:
{"age":33,"name":"Tom"}
{"id":"A001","name":"Jack"}
{"person":{"id":"A001","name":"Jack"},"age":33,"name":"Tom"}
3. 使用 JsonConfig 过虑属性:适用于 JavaBean/Map


package cn.sunzn.json; import net.sf.json.JSONObject;
import net.sf.json.JsonConfig; public class JsonLib {
public static void main(String[] args) {
JsonConfig config = new JsonConfig();
config.setExcludes(new String[] { "name" }); // 指定在转换时不包含哪些属性
Person person = new Person("A001", "Jack");
JSONObject jsonObject = JSONObject.fromObject(person, config); // 在转换时传入之前的配置对象
System.out.println(jsonObject);
}
}


运行结果如下,在运行结果中我们可以看到 name 属性被过滤掉了:
{"id":"A001"}
4. 将 Json 串转换成 Array:


package cn.sunzn.json; import java.util.Arrays;
import net.sf.json.JSONArray; public class JsonLib {
public static void main(String[] args) {
JSONArray jsonArray = JSONArray.fromObject("[89,90,99]");
Object array = JSONArray.toArray(jsonArray);
System.out.println(array);
System.out.println(Arrays.asList((Object[]) array));
}
}


运行结果如下:
[Ljava.lang.Object;@1e5003f6
[89, 90, 99]
5. 将 Json 串转成 JavaBean/Map:


package cn.sunzn.json;
import java.util.Map;
import net.sf.json.JSONObject;
public class JsonLib {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
/**
* 将 Json 形式的字符串转换为 Map
*/
String str = "{\"name\":\"Tom\",\"age\":90}";
JSONObject jsonObject = JSONObject.fromObject(str);
Map<String, Object> map = (Map<String, Object>) JSONObject.toBean(jsonObject, Map.class);
System.out.println(map);
/**
* 将 Json 形式的字符串转换为 JavaBean
*/
str = "{\"id\":\"A001\",\"name\":\"Jack\"}";
jsonObject = JSONObject.fromObject(str);
System.out.println(jsonObject);
Person person = (Person) JSONObject.toBean(jsonObject, Person.class);
System.out.println(person);
}
}


运行结果如下:
{age=90, name=Tom}
Person [id=A001, name=Jack]
在将 Json 形式的字符串转换为 JavaBean 的时候需要注意 JavaBean 中必须有无参构造函数,否则会报如下找不到初始化方法的错误:


Exception in thread "main" net.sf.json.JSONException: java.lang.NoSuchMethodException: cn.sunzn.json.Person.<init>()
at net.sf.json.JSONObject.toBean(JSONObject.java:288)
at net.sf.json.JSONObject.toBean(JSONObject.java:233)
at cn.sunzn.json.JsonLib.main(JsonLib.java:23)
Caused by: java.lang.NoSuchMethodException: cn.sunzn.json.Person.<init>()
at java.lang.Class.getConstructor0(Unknown Source)
at java.lang.Class.getDeclaredConstructor(Unknown Source)
at net.sf.json.util.NewBeanInstanceStrategy$DefaultNewBeanInstanceStrategy.newInstance(NewBeanInstanceStrategy.java:55)
at net.sf.json.JSONObject.toBean(JSONObject.java:282)
... 2 more
json的认识及对json数据的相互转化的更多相关文章
- php返回json,xml,JSONP等格式的数据
php返回json,xml,JSONP等格式的数据 返回json数据: header('Content-Type:application/json; charset=utf-8'); $arr = a ...
- 在JS和.NET中使用JSON (以及使用Linq to JSON定制JSON数据)
转载原地址: http://www.cnblogs.com/mcgrady/archive/2013/06/08/3127781.html 阅读目录 JSON的两种结构 认识JSON字符串 在JS中如 ...
- js 从一个json拼接成另一个json,并做json数据分页table展示
先给数据: //原始json数据json = [{"id":"1","aid":"013","performa ...
- delphi json(CDS包含了Delta数据包)
在delphi中,数据集是最常用数据存取方式.因此,必须建立JSON与TDataSet之间的互转关系,实现数据之间通讯与转换.值得注意的是,这只是普通的TDataset与JSON之间转换,由于CDS包 ...
- Json对象和字符串互相转换 数据拼接 JSON使用方式
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 一.JSON字符串转换为JSON对象: eval() 和 JSON.parse eg- json字符串: ...
- json 数据类型,后台在组数据时,错一个标点符号,前端都解析不出来。
json 数据类型,后台在组数据时,错一个标点符号,前端都解析不出来.
- Newtonsoft.Json读取txt文件中json数据并存到SQL service 数据库!
using System; using System.Collections.Generic; using System.Text; using System.IO; using Newtonsoft ...
- 【python接口自动化】- 使用json及jsonpath转换和提取数据
前言 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.它可以让人们很容易的进行阅读和编写,同时也方便了机器进行解析和生成,适用于进行数据交互的场景,比如 ...
- C# 使用Json.NET对数据进行序列化和反序列化 | c# json serialize and deserialize using json.net JsonConvert
本文首发于个人博客https://kezunlin.me/post/22391aa3/,欢迎阅读最新内容! c# json serialize and deserialize using json.n ...
随机推荐
- GNU Linux中的SO_RCVLOWAT和SO_SNDLOWAT说明
/********************************************************************* * Author : Samson * Date ...
- 14、反射(reflect)
一.反射概念 不用实例化也可以调用类中的私有成员:反射慢,实例化快:反射可以看到其他类中的内部构造,透明,但是不安全. JAR:JAVA函数库 WAR:web发布的包 YAR:RPC服务 二.idea ...
- UVA - 1476 Error Curves 三分
Error Curves Josephina is a clever girl and addicted to Machi ...
- 【甘道夫】Hadoop2.2.0环境使用Sqoop-1.4.4将Oracle11g数据导入HBase0.96,并自己主动生成组合行键
目的: 使用Sqoop将Oracle中的数据导入到HBase中,并自己主动生成组合行键! 环境: Hadoop2.2.0 Hbase0.96 sqoop-1.4.4.bin__hadoop-2.0.4 ...
- nyoj--90--整数划分(母函数)
整数划分 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 将正整数n表示成一系列正整数之和:n=n1+n2+-+nk, 其中n1≥n2≥-≥nk≥1,k≥1. 正整数 ...
- oracle 11g not in 与not exists 那个高效?
网络上很多谣言是后面跟小表用not in,后面跟大表用not exists,难道真的是这样子的嘛? 情况下面测试: 1.先用小表测试(1000条记录和一张8万条记录的表): SQL> creat ...
- 修改host文件浏览国外网站
公司电脑网络没法进github没办法工作需要只能FQ了. 方法1:用VPN 但是地要钱呐,没钱只能放弃了,不过每天试用还是可以的 方法2:改电脑host,文件中每条数据前面的#代表注释.把要访问的地址 ...
- Core Java(一)
一. 绪 1.软件:按照特定顺序组织的计算机数据和指令的集合. 软件开发:借助开发工具与计算机语言制作软件 2.计算机语言:用于人与计算机通讯的语言 分为机器语言,汇编语言,高级语言 高级语言分为编译 ...
- 路飞学城Python-Day14(practise)
本章总结 练习题 1.logging模块有几个日志级别? 5个,按级别从高到低分别是 CRITICAL(灾难)>ERROR(错误)>WARNING(警示)>INFO(信息)>D ...
- (二)React简介
React简介 2-1: React v16 (React Fiber) React比Vue更灵活 Vue更简单 2-2 开发环境搭建 如何开始:(两种方式) 1.传统方式script标签引入.js文 ...