操作JSON————精品

使用背景:

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式。同时,JSON是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON数据不须要任何特殊的 API 或工具包。 基于现在移动端开发的火爆程度,前后台分离的现状,json数据格式成为调用接口首选的格式,然而网页都是通过jsajax来访问服务端。Js来解析json就成了重点,而服务端处理json也是必需的,既总结了一下前后台对于json的操作。

JS操作JSON的要领做下总结

JSON中,有两种结构:对象和数组。

    1. 一个对象以“{”(左括号)开始,“}”(右括号)结束。每个名称后跟一个“:”(冒号);“‘名称/’ 之间运用 “,”(逗号)分隔。 名称用引号括起来;值如果是字符串则必须用括号,数值型则不须要。例如:

    var o={"xlid":"cxh","xldigitid":123456,"topscore":2000,"topplaytime":"2009-08-20"}

    2. 数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间运用 “,”(逗号)分隔。

例如:Var jsonranklist=[{"xlid":"cxh","xldigitid":123456,"topscore":2000,"topplaytime":

"2009-08-20"},{"xlid":"zd","xldigitid":123456,"topscore":1500,"topplaytime":"2009-11-20"}];

    为了方便地处理JSON数据,JSON提供了json.js包,下载地址:http://www.json.org/json.js

    在数据传输流程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键。例如:

    JSON字符串:

    var str1 = '{ "name": "cxh", "sex": "man" }';

    JSON对象:

    var str2 = { "name": "cxh", "sex": "man" };

    一、JSON字符串转换为JSON对象

    要运用上面的str1,必须运用下面的要领先转化为JSON对象:

    //JSON字符串转换为JSON对象

    var obj = eval('(' + str + ')');

或者 

    var obj = str.parseJSON(); //JSON字符串转换为JSON对象

    或者

    var obj = JSON.parse(str); //JSON字符串转换为JSON对象

    然后,就可以这样读取:

    Alert(obj.name);

    Alert(obj.sex);

    特别留心:如果obj本来就是一个JSON对象,那么运用 eval()函数转换后(哪怕是多次转换)还是JSON对象,但是运用 parseJSON()函数处理后会有疑问(抛出语法异常)。

    二、可以运用 toJSONString()或者全局要领 JSON.stringify()JSON对象转化为JSON字符串。

    例如:

    var last=obj.toJSONString(); //JSON对象转化为JSON字符

    或者

    var last=JSON.stringify(obj); //JSON对象转化为JSON字符

    alert(last);

    留心:

    上面的多个要领中,除了eval()函数是js自带的之外,其他的多个要领都来自json.js包。新版本的 JSON 修改了 API,将 JSON.stringify() 和 JSON.parse() 两个要领都注入到了 Javascript 的内建对象里面,前者变成了 Object.toJSONString(),而后者变成了 String.parseJSON()。如果提示找不到toJSONString()parseJSON()要领,则说明您的json包版本太低。

>>遍历JSON对象

myJson = {"name":"nikita", "password":"1111"};

for(var p in myJson){//遍历json对象的每个key/value对,p为key

   alert(p + " " + myJson[p]);

}

>>遍历JSON数组

packJson = [

{"name":"nikita", "password":"1111"},

{"name":"tony", "password":"2222"}

];

for(var p in packJson){//遍历json数组时,这么写p为索引,0,1

   alert(packJson[p].name + " " + packJson[p].password);

}

我更倾向于这种写法:

for(var i = 0; i < packJson.length; i++){

   alert(packJson[i].name + " " + packJson[i].password);

}

>>将两个JSON对象组装到一个里面

//targetJson 目标JSON,packJson 被组装JSON

function addGroupJson(targetJson, packJson){

    if(targetJson && packJson){

       for(var p in packJson){

           targetJson[p] = packJson[p];

       }

    }

}

用法如下:

var json1 = {"name":"nikita"};
var json2 = {"password":"1111"};
addGroupJson(json1, json2);
alert(json2str(json1));

最后写一个jquery解析json作为结束

使用jquery解析json:

 $.getJSON("jsonTest",{showNumber:"3"},function(data){     

     $.each(data,function(idx,item){    

     //alert(idx);    

    if(idx<0){    

          return true;//countinue,返回falsebreak

      }     

    alert("attchId:"+item.attchId+",taskName:"+item.attchName);     

 }); 

 }); 

 

需要引入的包:

 
  1. jakarta commons-lang 2.3   
  2. jakarta commons-beanutils 1.7.0   
  3. jakarta commons-collections 3.2   
  4. jakarta commons-logging 1.1   
  5. ezmorph 1.0.4   
  6. json-lib-2.4-jdk15.jar  
jakarta commons-lang 2.3 
jakarta commons-beanutils 1.7.0 
jakarta commons-collections 3.2 
jakarta commons-logging 1.1 
ezmorph 1.0.4 
json-lib-2.4-jdk15.jar

Product.java

 
  1. public class Product {  
  2.     private String product;  
  3.   
  4.     private double price;  
  5.   
  6.     private Object item;  
  7.   
  8.   
  9.     public Object getItem() {  
  10.         return item;  
  11.     }  
  12.   
  13.     public void setItem(Object item) {  
  14.         this.item = item;  
  15.     }  
  16.   
  17.     public String getProduct() {  
  18.         return product;  
  19.     }  
  20.   
  21.     public void setProduct(String product) {  
  22.         this.product = product;  
  23.     }  
  24.   
  25.     public double getPrice() {  
  26.         return price;  
  27.     }  
  28.   
  29.     public void setPrice(double price) {  
  30.         this.price = price;  
  31.     }  
  32.   
  33. }  
public class Product {
	private String product;

	private double price;

	private Object item;


	public Object getItem() {
		return item;
	}

	public void setItem(Object item) {
		this.item = item;
	}

	public String getProduct() {
		return product;
	}

	public void setProduct(String product) {
		this.product = product;
	}

	public double getPrice() {
		return price;
	}

	public void setPrice(double price) {
		this.price = price;
	}

}

JsonUtil.java

 
  1. public class JsonUtil {  
  2.     // {"product":"pencil","price":12,"item":[{"id":1,"name":"chen"}]}  
  3.     private static final String jsoStr = "{"product":"pencil","price":12,"item":[{"id":1,"name":"chen"}]}";  
  4.   
  5.     public static void main(String[] args) throws IOException {  
  6.         // String  
  7.         System.out.println(string4json("key", "20"));  
  8.   
  9.         // obj  
  10.         Product p = (Product) getObject4JsonString(jsoStr, Product.class);  
  11.         System.out.println(p.getProduct() + "," + p.getPrice());  
  12.   
  13.         // map  
  14.         Map map = getMap4Json(jsoStr);  
  15.         for (Iterator iterator = map.entrySet().iterator(); iterator.hasNext();) {  
  16.             Map.Entry entry = (Map.Entry) iterator.next();  
  17.             System.out.println(entry.getKey() + "," + entry.getValue());  
  18.         }  
  19.   
  20.         // 数组  
  21.         Object[] objects = getStringArray4Json(jsoStr);  
  22.         for (int i = 0; i < objects.length; i++) {  
  23.             System.out.println(objects[i]);  
  24.         }  
  25.     }  
  26.   
  27.     // 将String转换成JSON  
  28.     public static String string4json(String key, String value) throws JSONException {  
  29.         JSONObject object = new JSONObject();  
  30.         object.put(key, value);  
  31.         return object.toString();  
  32.     }  
  33.   
  34.     // 从一个JSON 对象字符格式中得到一个java对象  
  35.     public static Object getObject4JsonString(String jsonString, Class pojoCalss) {  
  36.         Object pojo;  
  37.         JSONObject jsonObject = JSONObject.fromObject(jsonString);  
  38.         pojo = JSONObject.toBean(jsonObject, pojoCalss);  
  39.         return pojo;  
  40.     }  
  41.   
  42.     // 从json 表达式中获取一个map    public static Map getMap4Json(String jsonString) {  
  43.         JSONObject jsonObject = JSONObject.fromObject(jsonString);  
  44.         Iterator keyIter = jsonObject.keys();  
  45.         String key;  
  46.         Object value;  
  47.         Map valueMap = new HashMap();  
  48.         while (keyIter.hasNext()) {  
  49.             key = (String) keyIter.next();  
  50.             value = jsonObject.get(key);  
  51.             valueMap.put(key, value);  
  52.         }  
  53.   
  54.         return valueMap;  
  55.     }  
  56.   
  57.     // 从json对象集合表达式中得到一个java对象列表  
  58.     public static List getList4Json(String jsonString, Class pojoClass) {  
  59.         JSONArray jsonArray = JSONArray.fromObject(jsonString);  
  60.         JSONObject jsonObject;  
  61.         Object pojoValue;  
  62.         List list = new ArrayList();  
  63.         for (int i = 0; i < jsonArray.size(); i++) {  
  64.             jsonObject = jsonArray.getJSONObject(i);  
  65.             pojoValue = JSONObject.toBean(jsonObject, pojoClass);  
  66.             list.add(pojoValue);  
  67.   
  68.         }  
  69.         return list;  
  70.   
  71.     }  
  72.   
  73.     // 从json数组中解析出java字符串数组  
  74.     public static Object[] getStringArray4Json(String jsonString) {  
  75.         JSONObject jsonObj = JSONObject.fromObject(jsonString);  
  76.         JSONArray jsonarr = jsonObj.getJSONArray("item");  
  77.         return (Object[]) jsonarr.toArray();  
  78.     }  
原文地址:https://www.cnblogs.com/lulu638/p/4817526.html