zoukankan      html  css  js  c++  java
  • javascript中字符串格式json如何转化成json对象

    什么是JSON

    JSON(JavaScript Object Notation)是一种优美的JavaScript对象创建方法。JSON也是一种轻量级数据交换格式。JSON非常易于人阅读与编写,同时利于机器解析与生成。JSON是在AJAX中代替XML交换数据的更佳方案。

    JSON格式与语法

    var jsonobject=
    {
            //对象内的属性语法(属性名与属性值是成对出现的)
            propertyname:value,

            //对象内的函数语法(函数名与函数内容是成对出现的)
            functionname:function(){...;}
    };

    jsonobject -- JSON对象名称
    propertyname -- 属性名称
    functionname -- 函数名称
    一对大括号,括起多个"名称/值"的集合
    JSON使用"名称/值"对的集合表示,也可以被理解为数组(Array)
    属性名或函数名可以是任意字符串,甚至是空字符串(见下面示例)
    逗号用于隔开每对"名称/值"对

    字符串格式json转化成json对象有3种方式:
    1:js下用eval生成JSON对象  ---通过eval() 函数可以将JSON字符串转化为对象。
    2:使用函数方式
    3:使用js的json库或者jQuery提供的js库  --- 如果基于安全的考虑的话,最好是使用一个 JSON 解析器。 一个 JSON 解析器将只接受 JSON 文本。所以是更安全的。

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
            <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
            <title>字符串格式json如何转化成json对象</title>
            <style type="text/css"></style>
            <script type="text/javascript">
                //方法1:js下用eval生成JSON对象
                function strJsonToJsonByEval(jsonData){ 
                    var json = eval("(" + jsonData +")");//转换为json对象   
                    return json;
                }
                
                //方法2:使用函数方式
                function strJsonToJsonByFunction(jsonData){ 
                  return ( new Function("return "+jsonData) )(); 
                }
                
                window.onload = function() {
                    var jsonData = " {name1:'1',value1:'a',name2:'2',value2:'b' }";
                    var json1 = strJsonToJsonByFunction(jsonData);
                    alert("Function || " + json1.name1 + "  ---  " + json1.name2);
                    
                    var json2 = eval("(  {name1:'1',value1:'a',name2:'2',value2:'b' } )");
                    alert("eval("("jsonData")")  || " + json2.value1 + "  ---  " + json2.value2);
                    
                    var json3 = strJsonToJsonByEval(jsonData);
                    alert("Eval || " + json3.value1 + "  ---  " + json3.value2);
                }
            </script>
            </head>
            <body>
            </body>
    </html>

    写成一个方法:

    /*
                 * @method 将拼接好字符串格式的json 转成json对象
                 * @param jsonData param fomart:
                 * var jsonData = "{name1:'1',value1:'a',name2:'2',value2:'b' }";
                 * @return json;
                 */
                function strJsonToJson(jsonData){ 
                    //方法1:js下用eval生成JSON对象
                    //var json = eval("(" + jsonData +")");//转换为json对象   
                    //return json;
                    //方法2:使用函数方式
                  return ( new Function("return "+jsonData) )(); 
                }

    jQuery

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>jQuery插件方式解析json</title>
    
    <script type="text/javascript" src="jquery-1.9.1.js"></script>
    <script type="text/javascript" src="jquery.json-2.4.js"></script>
    <script type="text/javascript">
    /*
    jquery-1.9.1.js 提供的方法。
    jQuery.parseJSON( json ) 返回: Object
    接受一个标准格式的 JSON 字符串,并返回解析后的 JavaScript 对象。
    
    传入格式有误的 JSON 字符串可能导致抛出异常。例如,下面这些 JSON 字符串格式都不对:
    {test: 1} (test 没有使用双引号包裹).
    {'test': 1} ('test' 用了单引号而不是双引号包裹).
    另外,如果你什么都不传入,或者传入空字符串、null、undefined 等,parseJSON 都会返回 null 。如果浏览器原生实现了 JSON.parse, jQuery 则会使用它来解析字符串。
    */
    var strJson = '{"name":"John"}';
    //var strJson = "{name:'John'}";//错误格式,必须严格满足一个标准格式的 JSON 字符串,key--value 都用双引号包裹
    var obj = jQuery.parseJSON(strJson);
    alert( obj.name === "John" ); // true
    
    var obj2 = $.parseJSON(strJson);
    alert( obj2.name  ); //John
    
    
    /*
    jquery.json-2.4.js 提供的方法。
    下面的方法在接受一个标准格式的 JSON 字符串 并不是很严格,只要是键值对形式的都可以。
    http://code.google.com/p/jquery-json/
    toJSON: Serializes a javascript object, number, string, or array into JSON.
    evalJSON: Converts from JSON to Javascript, quickly, and is trivial.
    */
    
    //Json Object
    var json = { plugin: 'jquery-json', version: 2.4 };
    
    //toJSON: Json Object ---> String Json
    var encoded = $.toJSON( json );// '{"plugin":"jquery-json","version":2.4}'
     
    //evalJSON: String Json ---> Json Object
    var jsonObject = $.evalJSON( encoded );
     
    var name = $.evalJSON( encoded ).plugin;// "jquery-json"
    var version = $.evalJSON(encoded).version;// 2.4
    
    alert( "toJSON: "  + encoded + " ,typeof "  + typeof encoded + "
    
    " 
         + "evalJSON: "  + jsonObject + " ,typeof "  + typeof(jsonObject) + "
    
    " 
         + "name= " + name + " , version= " + version );
    
    </script>
    </head>
    
    <body>
    </body>
    </html>

    http://rogerfederer.iteye.com/blog/1798024

  • 相关阅读:
    Begin Example with Override Encoded SOAP XML Serialization
    State Machine Terminology
    How to: Specify an Alternate Element Name for an XML Stream
    How to: Publish Metadata for a WCF Service.(What is the Metadata Exchange Endpoint purpose.)
    Beginning Guide With Controlling XML Serialization Using Attributes(XmlSerializaiton of Array)
    Workflow 4.0 Hosting Extensions
    What can we do in the CacheMetaData Method of Activity
    How and Why to use the System.servicemodel.MessageParameterAttribute in WCF
    How to: Begin Sample with Serialization and Deserialization an Object
    A Test WCF Service without anything of config.
  • 原文地址:https://www.cnblogs.com/netserver/p/4520826.html
Copyright © 2011-2022 走看看