json对象与字符串、数组之间的转换

json对象与字符串、数组之间的转换

JS中:

json格式字符串转json对象(strJSON代表json字符串)

var obj = eval(strJSON); 

var obj = strJSON.parseJSON(); 

var obj = JSON.parse(strJSON); 

json对象转json格式字符串(obj代表json对象)

var str = obj.toJSONString(); //必须要引入json.js包、局限性都比较大
var str = JSON.stringify(obj) 

运用时候需要除了eval()以外,其他的都需要引入json.js包,切记!!!

PHP中:

1、json_encode():

1.1、将php数组转换为json字符串

  1. 索引数组

    $arr = Array('one', 'two', 'three');
    echo json_encode($arr);
    
    

    输出

    ["one","two","three"]
    
    
  2. 关联数组:

    $arr = Array('1'=>'one', '2'=>'two', '3'=>'three');
    echo json_encode($arr);
    
    

    输出变为

    {"1":"one","2":"two","3":"three"}
    
    

1.2、将php类转换为json字符串

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;
     }
}

现在,对这个类的实例进行json转换:

$foo = new Foo;

$foo_json = json_encode($foo);

echo $foo_json;

输出结果是

{"public_ex":"this is public"}

2、json_decode():
将json文本转换为相应的PHP数据结构

2.1、通常情况下,json_decode()总是返回一个PHP对象,而不是数组比如:

$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_dump(json_decode($json));

结果就是生成一个PHP对象:

object(stdClass)#1 (5) {
     ["a"] => int(1) 
     ["b"] => int(2)
     ["c"] => int(3)
     ["d"] => int(4) 
     ["e"] => int(5)
 }

2.2、如果想要强制生成PHP关联数组,json_decode()需要加一个参数true:

$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_dump(json_decode($json,true));

结果就生成了一个关联数组:

array(5) {
    ["a"] => int(1)
    ["b"] => int(2)
    ["c"] => int(3)
    ["d"] => int(4)
    ["e"] => int(5)
}

3、json_decode()的常见错误

下面三种json写法都是错的

$bad_json = "{ 'bar': 'baz' }";

$bad_json = '{ bar: "baz" }';

$bad_json = '{ "bar": "baz", }';

对这三个字符串执行json_decode()都将返回null,并且报错。

第一个的错误是,json的分隔符(delimiter)只允许使用双引号,不能使用单引号。

第二个的错误是,json名值对的"名"(冒号左边的部分),任何情况下都必须使用双引号。

第三个的错误是,最后一个值之后不能添加逗号(trailing comma)。

另外,json只能用来表示对象(object)和数组(array),如果对一个字符串或数值使用json_decode(),将会返回null。

var_dump(json_decode("Hello World")); //null

你可能感兴趣的:(json对象与字符串、数组之间的转换)