- 名称/值对数据表示
- 大括号持有的对象和每个名称后跟":"(冒号),名称/值对的分离,(逗号)
- 方括号持有数组和值,(逗号)分隔。
1 { 2 "book": [ 3 { 4 "id":"01", 5 "language": "Java", 6 "edition": "third", 7 "author": "Herbert Schildt" 8 }, 9 { 10 "id":"07", 11 "language": "C++", 12 "edition": "second" 13 "author": "E.Balagurusamy" 14 }] 15 }
JSON支持的数据类型:
类型 描述
Number 在JavaScript中的双精度浮点格式
String 双引号的反斜杠转义的Unicode
Boolean true 或 false
Array 值的有序序列
Value 它可以是一个字符串,一个数字,真的还是假(true/false),空(null )等
Object 无序集合键值对
Whitespace 可以使用任何一对中的令牌
null empty
<script language="javascript" >
var JSONObj = { "Pascal" : [
{ "Name" : "Pascal Made Simple", "price" : 700,"category":[p1,p2] },
{ "Name" : "Guide to Pascal", "price" : 400,"category":[p1,p2] }
],
"Scala" : [
{ "Name" : "Scala for the Impatient", "price" : 1000 ,"category":[p1,p2]},
{ "Name" : "Scala in Depth", "price" : 1300,"category":[p1,p2] }
]};
</script>
jquery支持的将字符串转Json对象方法:
第一种方式:
function strToJson(str){
var json = eval('(' + str + ')');
return json;
}
第二种方式:使用JSON.parse需严格遵守JSON规范,如属性都需用引号引起来,没有用引号引起来用JSON.parse所有浏览器中均抛异常,解析失败。
function strToJson(str){
return JSON.parse(str);
}
第三种方式:
function strToJson(str){
var jsonObj = $.parseJSON(JSONObj);
return jsonObj ;
}
JSON与Java应用:
json与java实体之间的映射由JSON.simple实体映射从左侧向右侧解码或解析
JSON Java
string java.lang.String
number java.lang.Number
true|false ava.lang.Boolean
array java.util.List( java.util.List的具体类是具体类 org.json.simple.JSONArray )
Object java.util.Map(java.util.Map 是org.json.simple.JSONObject)
null null
自定义JsonUtil类:(需要引入org.apache.commons.logging.jar文件的支持)
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class JsonUtil {
/**
* 序列化对象为JSON格式 遵循JSON组织公布标准
*
* @date 2008/05/07
* @version 1.0.0
*/
/** Commons Logging instance. */
private static org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory
.getLog(JsonUtil.class);
/**
* @param obj
* 任意对象
* @return String
*/
public static String object2json(Object obj) {
StringBuilder json = new StringBuilder();
if (obj == null) {
json.append("""");
} else if (obj instanceof String
|| obj instanceof Integer
|| obj instanceof Boolean
|| obj instanceof Double
|| obj instanceof Long
|| obj instanceof Float
|| obj instanceof Integer
|| obj instanceof Character
|| obj instanceof Byte
) {
json.append(""").append(string2json(obj.toString())).append(""");
} else if (obj instanceof Object[]) {
json.append(array2json((Object[]) obj));
} else if (obj instanceof List) {
json.append(list2json((List<?>) obj));
} else if (obj instanceof Map) {
json.append(map2json((Map<?, ?>) obj));
} else if (obj instanceof Set) {
json.append(set2json((Set<?>) obj));
}else if (obj instanceof Date) {
Date date =(Date) obj;
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
json.append(""").append(sdf.format(date)).append(""");
} else {
json.append(bean2json(obj));
}
return json.toString();
}
/**
* @param bean
* bean对象
* @return String
*/
public static String bean2json(Object bean) {
StringBuilder json = new StringBuilder();
json.append("{");
PropertyDescriptor[] props = null;
try {
props = Introspector.getBeanInfo(bean.getClass(), Object.class)
.getPropertyDescriptors();
} catch (IntrospectionException e) {
}
if (props != null) {
for (int i = 0; i < props.length; i++) {
try {
String name = object2json(props[i].getName());
String value = object2json(props[i].getReadMethod().invoke(
bean));
json.append(name);
json.append(":");
json.append(value);
json.append(",");
} catch (Exception e) {
log.error(e);
}
}
json.setCharAt(json.length() - 1, '}');
} else {
json.append("}");
}
return json.toString();
}
/**
* @param list
* list对象
* @return String
*/
public static String list2json(List<?> list) {
StringBuilder json = new StringBuilder();
json.append("[");
if (list != null && list.size() > 0) {
for (Object obj : list) {
json.append(object2json(obj));
json.append(",");
}
json.setCharAt(json.length() - 1, ']');
} else {
json.append("]");
}
return json.toString();
}
/**
* @param array
* 对象数组
* @return String
*/
public static String array2json(Object[] array) {
StringBuilder json = new StringBuilder();
json.append("[");
if (array != null && array.length > 0) {
for (Object obj : array) {
json.append(object2json(obj));
json.append(",");
}
json.setCharAt(json.length() - 1, ']');
} else {
json.append("]");
}
return json.toString();
}
/**
* @param map
* map对象
* @return String
*/
public static String map2json(Map<?, ?> map) {
StringBuilder json = new StringBuilder();
json.append("{");
if (map != null && map.size() > 0) {
for (Object key : map.keySet()) {
json.append(object2json(key));
json.append(":");
json.append(object2json(map.get(key)));
json.append(",");
}
json.setCharAt(json.length() - 1, '}');
} else {
json.append("}");
}
return json.toString();
}
/**
* @param set
* 集合对象
* @return String
*/
public static String set2json(Set<?> set) {
StringBuilder json = new StringBuilder();
json.append("[");
if (set != null && set.size() > 0) {
for (Object obj : set) {
json.append(object2json(obj));
json.append(",");
}
json.setCharAt(json.length() - 1, ']');
} else {
json.append("]");
}
return json.toString();
}
/**
* @param s
* 参数
* @return String
*/
public static String string2json(String s) {
if (s == null)
return "";
StringBuilder sb = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
switch (ch) {
case '"':
sb.append("\"");
break;
case '\':
sb.append("\\");
break;
case '':
sb.append("\b");
break;
case 'f':
sb.append("\f");
break;
case '
':
sb.append("\n");
break;
case '
':
sb.append("\r");
break;
case ' ':
sb.append("\t");
break;
case '/':
sb.append("\/");
break;
default:
if (ch >= 'u0000' && ch <= 'u001F') {
String ss = Integer.toHexString(ch);
sb.append("\u");
for (int k = 0; k < 4 - ss.length(); k++) {
sb.append('0');
}
sb.append(ss.toUpperCase());
} else {
sb.append(ch);
}
}
}
return sb.toString();
}
}
使用jackson转换java类与json:
需要的Entity:
public class Student {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
用jackson转换java类与json的JsonUtils类:
import org.codehaus.jackson.map.ObjectMapper;
public class JsonUtils {
static ObjectMapper objectMapper;
/**
* 使用泛型方法,把json字符串转换为相应的JavaBean对象。
* 转换为普通JavaBean:readValue(json,Student.class)
* 转换为List:readValue(json,List.class
* ).但是如果我们想把json转换为特定类型的List,比如List<Student>,就不能直接进行转换了。
* 因为readValue(json,List
* .class)返回其实是List<Map>类型,你不能指定readValue()的第二个参数是List<Student
* >.class,所以不能直接转换。
* 我们可以把readValue()的第二个参数传递为Student[].class.然后使用Arrays.asList
* ();方法把得到的数组转换为特定类型的List。 转换为Map:readValue(json,Map.class) 我们使用泛型,得到的也是泛型
*
* @param content
* 要转换的JavaBean类型
* @param valueType
* 原始json字符串数据
* @return JavaBean对象
*/
public static <T> T readValue(String content, Class<T> valueType) {
if (objectMapper == null) {
objectMapper = new ObjectMapper();
}
try {
return objectMapper.readValue(content, valueType);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 把JavaBean转换为json字符串 普通对象转换:toJson(Student) List转换:toJson(List)
* Map转换:toJson(Map) 我们发现不管什么类型,都可以直接传入这个方法
*
* @param object
* JavaBean对象
* @return json字符串
*/
public static String toJSon(Object object) {
if (objectMapper == null) {
objectMapper = new ObjectMapper();
}
try {
return objectMapper.writeValueAsString(object);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
main方法测试类:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.log4j.Logger;
public class Log4jTest {
private static final Logger logger = Logger.getLogger(Log4jTest.class);
public static void main(String[] args) {
try {
List<Student> list = new ArrayList<Student>();
Student s = new Student();
s.setName("小明");
s.setAge(11);
Student s2 = new Student();
s2.setName("小红");
s2.setAge(22);
list.add(s);
list.add(s2);
Map<String , String> map = new HashMap<String , String>();
map.put("1", "a");
map.put("2", "b");
map.put("3", "c");
/**
* 使用jackson转换javaBean,list,map为json字符串
*/
System.out.println(JsonUtils.toJSon(s));
System.out.println(JsonUtils.toJSon(list));
System.out.println(JsonUtils.toJSon(map));
String strJson = "{"name":"小明","age":11}";
Student student = JsonUtils.readValue(strJson, Student.class);
System.out.println(student.getName()+student.getAge());
System.out.println("****将Json字符串转换为List集合************");
String strJson1 = "[{"name":"小明","age":"11"},{"name":"小明","age":"11"}]";
System.out.println(JsonUtils.readValue(strJson1, List.class));
System.out.println("****将Json字符串转换为javaBean数组************");
String strJsonArr = "[{"name":"小明","age":11},{"name":"小明","age":11},{"name":"小明","age":11}]";
Student[] studentArr = JsonUtils.readValue(strJsonArr, Student[].class);
for (Student student2 : studentArr) {
System.out.println(student2.getAge());
}
System.out.println("****将Json字符串转换为Map集合************");
String strJsonMap = "{"one":{"name":"小明","age":11},"two":{"name":"小明","age":11},"three":{"name":"小明","age":11}}";
Map<String,Map<String,Object>> jsonMap = JsonUtils.readValue(strJsonMap, Map.class);
System.out.println(jsonMap);
} catch (Exception e) {
logger.error("This is debug message.",e);
}
}
}
到这里下载代码:gitHub下载源代码 (记得在E:盘下建test.log文件记录log4j日志哦!)