likes
comments
collection
share

关于JSON的相关知识

作者站长头像
站长
· 阅读数 18

简介JSON:JavaScript 对象表示法JSON 是存储和交换文本信息的语法。类似 XML。JSON 比 XML 更小、更快,更易解析。JSON的媒体类型被定义为 application/json,而文件的后缀为.json。

JSON1、接口2、微信开发

XML1、我们一般用于sitemap较多2、xmlrpc是使用http协议做为传输协议的rpc机制,使用xml文本的方式传输命令和数据。

json和XML可以互转

和JavaScript一、JSON - 转换为 JavaScript 对象1、能够使用内建的 JavaScript eval(string)方法进行解析原因:JSON 文本格式在语法上与创建 JavaScript 对象的代码相同。由于这种相似性,无需解析器,JavaScript 程序能够使用内建的 eval() 函数,用 JSON 数据来生成原生的 JavaScript 对象。

ajax返回的是字符串,而不是json对象。data = eval('('+data+')');

二、实例

var JSONObject= 
  { 
    "name":"Bill Gates", "street":"Fifth Avenue New York 666", "age":56, "phone":"555 1234567"
  };

JSONObject.name //调用三、语法规则数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组值/对象/数组

四、方法1、JSON.parse()parse用于从一个字符串中解析出json对象

例子:

var str = '{"name":"huangxiaojian","age":"23"}'
结果:
JSON.parse(str)
Object
age: "23"
name: "huangxiaojian"
__proto__: Object

2、JSON.stringify()stringify()用于从一个对象解析出字符串

例子:

var  a = {a:1,b:2}
结果:
JSON.stringify(a)
"{"a":1,"b":2}"

五、错误提示1、

data不是正确的json格式,造成解析出错2、

var a=JSON.parse('{"a":"aaaaa"}');//正确 
var a=JSON.parse("{'a':'aaaaa'}");//错误 

3、 Uncaught TypeError: Cannot use 'in' operator to search for '' in JSON string解决方案:JSON字符串转换为JavaScript对象。要修复它,通过标准JSON.parse()或jQuery 的 $.parseJSON 将其转换为JavaScript对象。4、

var a = { };
var b = { a: a };
a.b = b;
JSON.stringify(a);

参考:https://segmentfault.com/a/11...

php中的json一、注意点1、json_last_error:返回最后发生的错误2、json_decode 当第二个参数为 TRUE 时,将返回 array 而非 object 。 3、由于json只接受utf-8编码的字符,所以json_encode()的参数必须是utf-8编码,否则会得到空字符或者null。

4、PHP支持两种数组,一种是只保存"值"(value)的索引数组(indexed array),另一种是保存"名值对"(name/value)的关联数组(associative array)。由于javascript不支持关联数组,所以json_encode()只将索引数组(indexed array)转为数组格式,而将关联数组(associative array)转为对象格式。

$arr = array('one', 'two', 'three');
echo json_encode($arr);  //["one","two","three"] 

$arr = array('1'=>'one', '2'=>'two', '3'=>'three'); 
echo json_encode($arr);  // {"1":"one","2":"two","3":"three"}

数据格式从"[]"(数组)变成了"{}"(对象)。如果你需要将"索引数组"强制转化成"对象",可以这样写

echo json_encode((object)$arr);  
echo json_encode($arr,JSON_FORCE_OBJECT  )

5、类的转换

<?php
class Foo {
      const     ERROR_CODE = '404';
      public    $public_ex = 'this is public';
      private   $private_ex = 'this is private!';
      protected $protected_ex = 'this should be protected'; 
      public function getErrorCode() {
              return self::ERROR_CODE;
      }
}
$foo = new Foo;
$foo_json = json_encode($foo);
echo $foo_json;
?>
//输出结果
    {     
      "public_ex": "this is public" 
     }

除了公开变量(public),其他东西(常量、私有变量、方法等等)都遗失了。

二、错误

$json = "{ 'bar': 'baz' }";      //分割符只能用单引号  
$json = '{ bar: "baz" }';        
$json = '{ "bar": "baz", }';

二、中文编码的问题1、

    function getJson($data){
        if(version_compare('5.4',PHP_VERSION,'<')){
            //5.4以上
            return json_encode($data,JSON_UNESCAPED_UNICODE);
        }else{
            return urldecode(json_encode(url_encode($data)));
        }
    }

数据存的json格式,如果数据库存的是array

eval("\$session= $str;");

三、json格式的问题微信放的json解析不了:去除反斜杠 StripSlashes

补充:json的校验一个文本文档或字符串必须遵守JSON的语法定义,才能被视作一个有效的JSON文档。http://www.jsonlint.com/补充:用 JSON 构建 API 的标准指南中文版http://jsonapi.org.cn/