操作JSON————精品
使用背景:
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式。同时,JSON是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON数据不须要任何特殊的 API 或工具包。 基于现在移动端开发的火爆程度,前后台分离的现状,json数据格式成为调用接口首选的格式,然而网页都是通过js、ajax来访问服务端。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,返回false同break
}
alert("attchId:"+item.attchId+",taskName:"+item.attchName);
});
});
需要引入的包:
- 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
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
- 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;
- }
- }
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
- public class JsonUtil {
- // {"product":"pencil","price":12,"item":[{"id":1,"name":"chen"}]}
- private static final String jsoStr = "{\"product\":\"pencil\",\"price\":12,\"item\":[{\"id\":1,\"name\":\"chen\"}]}";
- public static void main(String[] args) throws IOException {
- // String
- System.out.println(string4json("key", "20"));
- // obj
- Product p = (Product) getObject4JsonString(jsoStr, Product.class);
- System.out.println(p.getProduct() + "," + p.getPrice());
- // map
- Map map = getMap4Json(jsoStr);
- for (Iterator iterator = map.entrySet().iterator(); iterator.hasNext();) {
- Map.Entry entry = (Map.Entry) iterator.next();
- System.out.println(entry.getKey() + "," + entry.getValue());
- }
- // 数组
- Object[] objects = getStringArray4Json(jsoStr);
- for (int i = 0; i < objects.length; i++) {
- System.out.println(objects[i]);
- }
- }
- // 将String转换成JSON
- public static String string4json(String key, String value) throws JSONException {
- JSONObject object = new JSONObject();
- object.put(key, value);
- return object.toString();
- }
- // 从一个JSON 对象字符格式中得到一个java对象
- public static Object getObject4JsonString(String jsonString, Class pojoCalss) {
- Object pojo;
- JSONObject jsonObject = JSONObject.fromObject(jsonString);
- pojo = JSONObject.toBean(jsonObject, pojoCalss);
- return pojo;
- }
- // 从json 表达式中获取一个map public static Map getMap4Json(String jsonString) {
- JSONObject jsonObject = JSONObject.fromObject(jsonString);
- Iterator keyIter = jsonObject.keys();
- String key;
- Object value;
- Map valueMap = new HashMap();
- while (keyIter.hasNext()) {
- key = (String) keyIter.next();
- value = jsonObject.get(key);
- valueMap.put(key, value);
- }
- return valueMap;
- }
- // 从json对象集合表达式中得到一个java对象列表
- public static List getList4Json(String jsonString, Class pojoClass) {
- JSONArray jsonArray = JSONArray.fromObject(jsonString);
- JSONObject jsonObject;
- Object pojoValue;
- List list = new ArrayList();
- for (int i = 0; i < jsonArray.size(); i++) {
- jsonObject = jsonArray.getJSONObject(i);
- pojoValue = JSONObject.toBean(jsonObject, pojoClass);
- list.add(pojoValue);
- }
- return list;
- }
- // 从json数组中解析出java字符串数组
- public static Object[] getStringArray4Json(String jsonString) {
- JSONObject jsonObj = JSONObject.fromObject(jsonString);
- JSONArray jsonarr = jsonObj.getJSONArray("item");
- return (Object[]) jsonarr.toArray();
- }
操作JSON————精品的更多相关文章
- 让C#可以像Javascript一样操作Json
Json的简介 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了 ...
- JavaScript操作JSON的方法总结,JSON字符串转换为JSON对象
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意 ...
- C# 技巧(3) C# 操作 JSON
RestAPI中, 经常需要操作json字符串, 需要把json字符串"反序列化"成一个对象, 也需要把一个对象"序列化"成一字符串. C# 操作json, ...
- JS操作JSON总结
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意 ...
- jsoncpp操作 json
jsoncpp操作 json 博客分类: c/c++ object-c 之 iphone #include <iostream> //#include "json/json. ...
- C#操作JSON
http://www.cnblogs.com/LiZhiW/p/3624729.html C#操作JSON 1. .NET对JSON的支持介绍............................. ...
- JSON和GSON操作json数据
1,JSON操作json import net.sf.json.JSONArray; import net.sf.json.JSONObject; //json操作数据 public static S ...
- js之操作JSON数据
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意 ...
- (转)JSON数据格式和js操作json总结
原:http://niutuku.com/tech/javaScript/273643.shtml JSON数据格式和js操作json总结 来源:niutuku.com | vince ...
随机推荐
- AtCoder 神题汇总
记录平时打 AtCoder 比赛时遇到的一些神题. Tenka1 Programmer Contest 2019 D Three Colors 题目大意 有 $n$ 个正整数 $a_1, a_2,\d ...
- [洛谷P1251]餐巾计划问题
题目大意:一个餐厅N天,每天需要$r_i$块餐巾.每块餐巾需要p元,每天用过的餐巾变脏,不能直接用.现在有快洗店和慢洗店,快洗店洗餐巾需要m天,每块花费f元:慢洗店洗餐巾需要n天,每块餐巾s元(m & ...
- [LG1886]滑动窗口 单调队列
---题面--- 题解: 观察数据范围,这应该是一个复杂度O(n)的题.以最大值为例,考虑单调队列,维护一个单调递减的队列.从前向后扫,每次答案取队首,如果后面进入的比前面大,那么就弹出前面的数,因为 ...
- hadoop基础----hadoop实战(九)-----hadoop管理工具---CDH的错误排查(持续更新)
在CDH安装完成后或者CDH使用过程中经常会有错误或者警报,需要我们去解决,积累如下: 解决红色警报 时钟偏差 这是因为我们的NTP服务不起作用导致的,几台机子之间有几秒钟的时间偏差. 这种情况下一是 ...
- POJ2240:Arbitrage(最长路+正环)
Arbitrage Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 29374 Accepted: 12279 题目链接: ...
- 前端面试:js闭包,为什么要使用闭包
要理解闭包,首先理解javascript特殊的变量作用域,变量的作用于无非就是两种:全局变量,局部变量. javascript语言的特殊处就是函数内部可以读取全局变量. 1.如何从外部读取局部变量? ...
- java生成API文档
1.选择项目右键-Export\javadoc 2.选择生成工具在jdk安装目录下jdk\bin\javadoc.exe 3.在Eclipse里 export 选 JavaDoc,在向导的最后一页的E ...
- [bzoj3231][SDOI2008]递归数列——矩阵乘法
题目大意: 一个由自然数组成的数列按下式定义: 对于i <= k:ai = bi 对于i > k: ai = c1ai-1 + c2ai-2 + ... + ckai-k 其中bj和 cj ...
- TensorFlow_曲线拟合
# coding:utf-8 import tensorflow as tf import numpy as np import matplotlib.pyplot as plt import os ...
- bzoj 1861 splay
就是裸地splay,然后自己写的不是特别好,tle了,最近时间比较紧迫,有时间了改下,在此记录 另附转载pascal AC代码最下面 /******************************** ...