关于JSON的相关知识
简介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/