JSON数据转换

来源:互联网 发布:paxos算法 视频 编辑:程序博客网 时间:2024/06/05 08:12


关于JSON的定义:

      JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。非常适合于服务器与 JavaScript 的交互。

      JSON是JavaScript 的原生格式,这意味着在 JavaScript 中处理 JSON数据不需要任何特殊的 API 或工具包。

      JSON 库支持许多不同的编程语言。为了方便地处理JSON数据,JSON提供了json.js包


        前后台交互json实在是用的太多太多,特此总结记录一下:


    在JSON中,有两种结构:对象和数组。【数组表示有序数据的集合,而对象表示无序数据的集合。如果数据的顺序很重要,就用数组,否则就用对象。】


1.对象

    对象的表现形式是    {...}

    例如: var object = {"name":"张三","age":25,"sex":"男"}

2. 数组:值(value)的有序集合

    数组的表达形式是: [{...},{...},{...}]

    例如: var arr = [{"name":"张三","age":25,"sex":"男"},{"name":"李四","age":20,"sex":"女"}]


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


JSON字符串:
    var str1 = '{ "name": "张三", "sex": "男" }';
JSON对象:
    var str2 = { "name": "张三", "sex": "男" };


一、对应服务器返回的JSON字符串转换为JSON对象(包括以下四种方法)
    要运用上面的str1,必须运用下面的要领先转化为JSON对象:
    ①. //由JSON字符串转换为JSON对象,这种方式也适合以普通javascipt方式获取json对象
        var obj = eval("(" + str1 +")"); 

        那么eval函数里面为什么要添加双引号加括号的形式呢?

               原因在于:eval本身的问题。由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。,如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。所以下面两个执行结果是不同的:
alert(eval("{}"); // return undefined
alert(eval("({})");// return object[Object]


     ②. var obj = str1.parseJSON(); //由JSON字符串转换为JSON对象
 
     ③. var obj = JSON.parse(str1); //由JSON字符串转换为JSON对象
    
     ④. var obj =  jQuery.parseJSON( str1);      // parseJSON()函数属于全局的jQuery对象。
           jQuery.parseJSON()函数用于将格式完好的JSON字符串转为与之对应的JavaScript对象。
          所谓"格式完好",就是要求指定的字符串必须符合严格的JSON格式,例如:属性名称必须加双引号、字符串值也必须用
双引号

    通过上面这四种方式就可以像下面这样轻易的读取:
    Alert(obj.name);
    Alert(obj.sex);

    注意:如果obj本来就是一个JSON对象,那么运用 eval()函数转换后(哪怕是多次转换)还是JSON对象,但是运用 parseJSON()函数处理后会抛出语法异常!
 
二、将JSON对象转化为JSON字符串
    //将JSON对象转化为JSON字符
    var last=obj.toJSONString(); 
    或者
    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对象与字符串之间的相互转换,那么后台也需要传给前台相应的json形式的字符串,以便前台js解析读取!

    // 将pojo对象转换成Json对象
    JSONObject jsonObject = JSONObject.fromObject(object);
    // 输出String字符串
    return jsonObject.toString();


    Java端使用的json包【json-lib-2.2.2.jar】,该包提供了各种类型转换为json对象的方法。主要用到了以下两个类:          JSONObject, JSONArray
 
    该json包点击下载
 


以上








0 0