zoukankan      html  css  js  c++  java
  • json详解

    JSON有两种表示结构,对象和数组。
    对象结构以”{”大括号开始,以”}”大括号结束。中间部分由0或多个以”,”分隔的”key(关键字)/value(值)”对构成,关键字和值之间以”:”分隔,语法结构如代码。

    {
        key1:value1,
        key2:value2,
        ...
    }

    其中关键字是字符串,而值可以是字符串,数值,true,false,null,对象数组

    数组结构以”[”开始,”]”结束。中间由0或多个以”,”分隔的值列表组成,语法结构如代码。

    [
        {
            key1:value1,
            key2:value2 
        },
        {
             key3:value3,
             key4:value4   
        }
    ]

    之前我一直有个困惑,分不清普通字符串,json字符串和json对象的区别。经过一番研究终于给弄明白了。比如在js中。

    字符串:这个很好解释,指使用“”双引号或’’单引号包括的字符。例如:var comStr = 'this is string';
    json字符串:指的是符合json格式要求的js字符串。例如:var jsonStr = "{StudentID:'100',Name:'tmac',Hometown:'usa'}";
    json对象:指符合json格式要求的js对象。例如:var jsonObj = { StudentID: "100", Name: "tmac", Hometown: "usa" };

    举例说明

    var json1 =  { "a":{"pic":"1.jpg","mp4":"1.mp4"},"b":['bb','cc']};
    var json2 = [{"a":"aa"},{"b":{"c":"cc"}},{"d":["dd",{"e":"ee"}]}];
    alert(json1.a.pic);//结果:1.jpg
    alert(json1.b[1]);//结果:cc
    alert(json2[0].a);//结果:aa
    alert(json2[1].b.c);//结果:cc
    alert(json2[2].d[0]);//结果:dd
    alert(json2[2].d[1].e);//结果:ee

    js中对json要求不严格,即使没有引号,也可以使用,但是php中key必须使用双引号引起来,单引号都不行!

    js中可以这样使用

    var abc = {a:[0,1,2,3,4,5,6,7,8],b:[9,10,11,12,13,14,15,16,17,18,19]};//没有引号

    var abc = {'a':[0,1,2,3,4,5,6,7,8],'b':[9,10,11,12,13,14,15,16,17,18,19]};//单引号

    var abc = {"a":[0,1,2,3,4,5,6,7,8],"b":[9,10,11,12,13,14,15,16,17,18,19]};//双引号
    alert(abc.a);都可以

    如果key是数字,则这样

    var abc = {0:[0,1,2,3,4,5,6,7,8],1:[9,10,11,12,13,14,15,16,17,18,19]};//没有引号

    alert(abc[0]);//即使加引号,数字也是这样用

    php中则必须是双引号

    $abc = '{"a":[0,1,2,3,4,5,6,7,8],"b":[9,10,11,12,13,14,15,16,17,18,19]};

    var_dump(json_decode($abc,true));

    如果key没有加双引号可以用以下方法

    function ext_json_decode($str, $mode=false){
    if(preg_match('/w:/', $str)){
    $str = preg_replace('/(w+):/is', '"$1":', $str);
    }
    return json_decode($str, $mode);
    }

    这样会自动加双引号,并返回数组或者对象

  • 相关阅读:
    sql server 获取存储过程,表值,标量函数的参数
    拼接枚举字符串
    存储过程的输出接受强类
    映射对象
    C# abstract,virtual 修饰符
    SqlSugar之SqlQueryDynamic返回值处理
    sql server 中数据库数据导入到另一个库中
    sql server 自增长显式添加值
    sql得到表中的列信息
    程序中MMap集合数据重复导致程序慢的情况
  • 原文地址:https://www.cnblogs.com/blueskycc/p/5312883.html
Copyright © 2011-2022 走看看