使用背景:

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);

});

});

需要引入的包:

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

操作JSON————精品的更多相关文章

  1. 让C#可以像Javascript一样操作Json

    Json的简介 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了 ...

  2. JavaScript操作JSON的方法总结,JSON字符串转换为JSON对象

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意 ...

  3. C# 技巧(3) C# 操作 JSON

    RestAPI中, 经常需要操作json字符串,  需要把json字符串"反序列化"成一个对象, 也需要把一个对象"序列化"成一字符串. C# 操作json, ...

  4. JS操作JSON总结

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意 ...

  5. jsoncpp操作 json

    jsoncpp操作 json 博客分类: c/c++ object-c 之 iphone   #include <iostream> //#include "json/json. ...

  6. C#操作JSON

    http://www.cnblogs.com/LiZhiW/p/3624729.html C#操作JSON 1. .NET对JSON的支持介绍............................. ...

  7. JSON和GSON操作json数据

    1,JSON操作json import net.sf.json.JSONArray; import net.sf.json.JSONObject; //json操作数据 public static S ...

  8. js之操作JSON数据

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意 ...

  9. (转)JSON数据格式和js操作json总结

    原:http://niutuku.com/tech/javaScript/273643.shtml JSON数据格式和js操作json总结 来源:niutuku.com |         vince ...

随机推荐

  1. SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase

    sqlserver 插入数据的时候 插入失败,报错内容为 “SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, ...

  2. Python数据分析(四)DataFrame, Series, ndarray, list, dict, tuple的相互转换

    转自:https://blog.csdn.net/lambsnow/article/details/78517340 import numpy as np import pandas as pd ## ...

  3. 2017博普杯 东北大学邀请赛(B. Drink too much water)(贪心+树链剖分)

    题目地址:https://oj.neu.edu.cn/problem/1204 题目大意: 其实就是树上的线段覆盖, 给出一棵n个结点的树,然后给出树上的一些路径进行覆盖,然后要求选取最少的点,能够把 ...

  4. null?对象?异常?到底应该如何返回错误信息

    这篇文章记录我的一些思考.在工作了一段时间之后. 问题的核心很简单:到底如何返回错误信息. 学生时代,见到过当时的老师的代码: if (foo() == null) { } 当然,这位老师是一位比较擅 ...

  5. [Leetcode] Reverse nodes in k group 每k个一组反转链表

    Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. If ...

  6. BZOJ 3262: 陌上花开 CDQ

    这个题大部分人用了离散然后水之,然而.....作为一只蒟蒻我并没有想到离散,而是直接拿两个区间一个对应n,一个对应k来搞,当然这两个区间是对应的,我把第一维排序,第二维CDQ,第三维树状数组,然而由于 ...

  7. composer应用

    ubentu安装 进入自己的项目根目录cd/path/to/my/project 下载composer curl -s http://getcomposer.org/installer 把这个文件移到 ...

  8. 数据结构之DFS与BFS

    深度搜索(DFS) and  广度搜索(BFS) 代码如下: #include "stdafx.h" #include<iostream> #include<st ...

  9. c++ 批量初始化数组 fill和fill_n函数的应用

    转自c++ 如何批量初始化数组 fill和fill_n函数的应用 std::fill(a+,a+,0x3f3f3f3f);///从下标2到下标10 前闭后开 共8个 std::fill_n(a+,,0 ...

  10. mybatis基本流程、jdbc连接、ps:附mybatis(乐观锁)实现

    一.前言 Mybatis和Hibernate一样,是一个优秀的持久层框架.已经说过很多次了,原生的jdbc操作存在大量的重复性代码(如注册驱动,创建连接,创建statement,结果集检测等).框架的 ...