1. 程式人生 > >php json格式互轉

php json格式互轉

php原生提供 json_encode($str)和json_decode($str)。

1.json_encode()

此函式是將php的array和object轉換成json格式。

eg:array

  $arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);
  echo json_encode($arr);

result:{"a":1,"b":2,"c":3,"d":4,"e":5}

eg:object

  $obj->body = 'another post';

  $obj->id = 21;

result:  {
    "body":"another post",

    "id":21,

  }

二、索引陣列和關聯陣列

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

注意,資料格式從"[]"(陣列)變成了"{}"(物件)。

如果你需要將"索引陣列"強制轉化成"物件",可以這樣寫

  json_encode( (object)$arr );

或者

  json_encode ( $arr, JSON_FORCE_OBJECT );

三、類(class)的轉換

下面是一個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;

    }

  }

現在,對這個類的例項進行json轉換:

  $foo = new Foo;

  $foo_json = json_encode($foo);

  echo $foo_json;

輸出結果是

  {"public_ex":"this is public"}

可以看到,除了公開變數(public),其他東西(常量、私有變數、方法等等)都遺失了

四、json_decode()

該函式用於將json文字轉換為相應的PHP資料結構。下面是一個例子:

  $json = '{"foo": 12345}';

  $obj = json_decode($json);

  print $obj->{'foo'}; // 12345

通常情況下,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)

  }

如果想要強制生成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)

  }

五、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

相關推薦

php json格式

php原生提供 json_encode($str)和json_decode($str)。 1.json_encode() 此函式是將php的array和object轉換成json格式。 eg:array   $arr = array ('a'=>1,'b'=>2

SAP中ABAP格式JSON格式方法研究

一、JSON概念JSON(JavaScript Object Notation) 是一種輕量級的資料交換格式。JSON資料格式示例: {     "學生": [         {"姓名":"小明","年齡":23},         {"姓名":"大憨","年齡":2

ABAP-JSON資料格式

1 *&---------------------------------------------------------------------* 2 *& Report ZRICO_TEST32_JSON 3 *& 4 *&--------------

js數字貨幣格式

返回 oat tof UNC == bsp fun fixed brush //將1,234,567.00轉換為1234567.00 function moneyToNumValue(val) { var num = val.trim();

dlib中的image和opencv中的image格式

//dlib::array2d is an image already, you can use it for any dlib's image functions //load image: dlib::array2d<dlib::rgb_pixe

properties和yaml線上格式

分享一個線上properties 與yml格式互轉工具。 域名非常簡單好記,地址:http://toyaml.com/ Spring Boot 整個應用程式只有一個配置檔案,那就是 .properties 或 .yml 檔案。因 Spring Boot 對每個配置項都有預設值。所以也可不配置。當然,我們也

影象RGB2YUV與YUV2RGB格式介紹

1 YUV格式與RGB格式說明   由於不同國家的電視訊號系統支援的影象格式不同,有YUV格式成像,也有RGB格式成像,因此為了保證相容性,需要進行RGB與YUV格式的互轉。 另外YUV格式具有亮度資訊和色彩資訊分離的特點,但大多數影象處理操作都是基於RGB格式,需要將RGB格式轉

Java程式碼 json格式資料化成xml jsonToXml

import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import java.util.Iterator; import java

json 實體, list json ,List<實體> List<Object> , List<Objcet> List<Map> map 實體 , mapjson

// json 實體互轉, list json互轉 ,List<實體> 轉List<Object> , List<Objcet> 轉List<Map> 使用alibaba的json工具包 import com.al

PIL.Image.open與cv2.imread格式

PIL.Image轉換成OpenCV格式: import cv2 from PIL import Image import numpy path = '/home/gavin/Desktop/demo-card-1.jpeg' img = Image.open(path).convert("

迅捷CAD看圖軟體,DWG、DXF格式

迅捷CAD看圖軟體,DWG、DXF格式互轉。我們在日常工作中常常會遇到各種CAD版本轉換問題。之前我們都是選擇安裝各種CAD轉換器來操作,其中我覺得最好用的就是迅捷CAD轉換器了。但若是不安裝任何CAD轉換器,DWG、DXF格式的CAD圖紙是否可以互轉?小編今天就給大家演示一下,使用迅捷CAD看圖軟體來操作D

json model

1.json轉model TestModel tm = new TestModel();JavaScriptSerializer js = new JavaScriptSerializer();tm = js.Deserialize<TestModel>(JsonString); 2.mode

java物件與json字串

場景:java物件與json字串互轉換 1.本例使用com.alibaba.fastjson.JSON類 2.實體物件轉換為json字串 public static String toJSONString(Object city) { String jsonStr = ""; if (c

JSON — Java與JSON資料

轉換時Bean所要求的: 被轉換的Bean必需是public的。 Bean被轉換的屬性一定要有對應的get方法,且一定要是public的。 Bean中不能用引用自身的this的屬性,否則執行時出現et.sf.json.JSONException: There is a cy

FastJSON 簡介及其Map/JSON/String

在日誌解析,前後端資料傳輸互動中,經常會遇到 String 與 map、json、xml 等格式相互轉換與解析的場景,其中 json 基本成為了跨語言、跨前後端的事實上的標準資料互動格式。應該來說各個語言中 解析 json 的庫都一大片(具體 json 格式與三方庫的介紹請見: http:/

經緯度格式-(度度分秒 度分秒度……)

經緯度格式分為三種:  度:              ( ddd.ddddd °)                &nb

DataTable 和Json 字串

#region  DataTable 轉換為Json字串例項方法 /// <summary> /// GetClassTypeJosn 的摘要說明 /// </summary> public class GetClassTypeJosn : IHttpHandler

Json物件與Json字串(4種轉換方式)

1.jQuery外掛支援的轉換方式: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以將json字串轉換成json物件 2.瀏覽器支援的轉換方式(Firefox,chrome,opera,s

C# 時間格式

C# string to DateTime yyyy-MM-dd HH:mm:ss 毫秒輸出 string dateTimeString = "2008-09-12 15:14:56.135"; DateTime time = DateTime.ParseExact(d

二:C#物件、集合、DataTable與Json內容示例;

這個過程沒有什麼需要說的,擼個簡單一點的程式碼說明下:先定義一個人員類,這個類裡面的屬性有string,int,list,列舉,這幾個差不多夠了。 public class people { public string Name { get; set; } pub