json_encode()為null,引發的json相關總結
上次使用 json_decode() 解析從前端複製過來的json資料,發現怎麼都解析不出來,檢視json格式,發現沒問題啊! /* 注意: 之前碰過同樣的問題,有可能是實體引起的!但那應該是針對從其他地方接收到的變數,而非是複製過來的字串! 碰到這種問題,可以使用 html_entity_decode() */ 下面黏貼下,我複製過的大概的字串: $str = "[{'name':'dongxuemin','age':30},{'name':'yangyaping','age':30}]"; 反正讓我看,我是真的看不出錯誤! 下面,揭曉答案: 上面的錯誤是:json字串的格式不正確! 正確的是: ****** json中的 '鍵' 和 '值',都必須是雙引號("),在json裡只能用雙引號表示字串。 ****** JSON字串嚴格要求!!!說實話,沒細看過json,我是真心不知道這個!上面的還是我花了不少時間測出來的。 先定義一個相同的陣列: $a = [ ['name' => 'dongxuemin', 'age' => 30], ['name' => 'yangyaping', 'age' => 30], ]; echo json_encode($a); // 輸出:[{"name":"dongxuemin","age":30},{"name":"yangyaping","age":30}] 然後和之前的字串一個一個對比,整了好久的! PHP手冊的例子,有一個就指出了幾個經常錯誤的原因: <?php // the following strings are valid JavaScript but not valid JSON(下面字元是有效的js字串,但無效的JSON) // the name and value must be enclosed in double quotes // single quotes are not valid(物件的鍵和值,必須是 '雙引號') $bad_json = "{ 'bar': 'baz' }"; json_decode($bad_json); // null // the name must be enclosed in double quotes(物件的鍵,必須使用雙引號,js中可不新增引號,但json不可以) $bad_json = '{ bar: "baz" }'; json_decode($bad_json); // null // trailing commas are not allowed(最後面的 ',' 多餘) $bad_json = '{ bar: "baz", }'; json_decode($bad_json); // null ?> 找到問題後,就想對 JSON 稍微瞭解一點,就找了點文章看看: 具體就不總結了,有點晚。其實下面幾篇文章總結的都不錯(自己看下) 參考文章: http://php.net/manual/zh/book.json.php(PHP文件的JSON擴充套件) http://www.faqs.org/rfcs/rfc7159.html(PHP實現的JSON標準) http://www.json.org/json-zh.html(JSON官網??) http://www.ruanyifeng.com/blog/2009/05/data_types_and_json.html(阮一峰寫的部落格,真的是精闢!有時間應該全部拜讀一遍!) http://www.cnblogs.com/jamesbd/p/4185342.html http://www.cnblogs.com/pinganzi/p/6229369.html http://blog.csdn.net/leedaning/article/details/70210770 PHP官網的JSON,也瞭解了下: 4個函式: json_encode($value [, $options = 0 [, $depth = 512]]) $value - 可以是除了 'resource' 型別外的其他7種類型 編碼必須是 'UTF-8' $options - 可以使用多個 JSON_HEX_QUOT - JSON_HEX_TAG - JSON_HEX_AMP - ... 我們平常說,編碼中文,不亂碼,可以使用 'JSON_UNESCAPED_UNICODE' $depth - 設定最大深度(不用管) json_decode($json [, $assoc = false [, $depth = 512 [, $options = []]]]) $json - 要解析的json字串 編碼必須是 'UTF-8' $assoc - 是否返回關聯陣列,預設是false,表示返回物件(assoc - 從單詞上就知道是 '關聯' 意思) $depth - 指定遞迴深度(不用管) $options - 只有2個 JSON_BIGINT_AS_STRING - 用於將大整數轉為字串而非預設的float型別 JSON_OBJECT_AS_ARRAY - 與將assoc設定為 TRUE 有相同的效果(返回關聯陣列) // 2個都是,返回json編碼或解碼時,最後發生的錯誤 json_last_error() // 返回的是 '錯誤碼' json_last_error_msg() // 返回的是 '錯誤詳情' // 錯誤碼 JSON_ERROR_NONE - 無錯誤 JSON_ERROR_DEPTH - 到達了最大堆疊深度 JSON_ERROR_STATE_MISMATCH - 無效或異常的 JSON JSON_ERROR_CTRL_CHAR - 控制字元錯誤,可能是編碼不對 JSON_ERROR_SYNTAX - 語法錯誤 JSON_ERROR_UTF8 - 異常的 UTF-8 字元,也許是因為不正確的編碼 ... 還有更多,自己看文件 ... JsonSerializable - JSON序列化介面 /* 注意: 這個才是要解釋的重點! */ 介面定義: JsonSerializable { // 指定需要被序列化成 JSON 的資料(指定傳遞給 json_encode($value) 的$value內容) abstract public mixed jsonSerialize ( void ) } 解釋下這個介面存在的意義: 預設情況下,json_encode()一個物件,會將物件的所有屬性,編碼為一個json物件。例如: class prev { $name = 'dongxuemin'; $age = 30; function a(){ } ... } json_encode(new prev()); // 輸出 "{'name': 'dongxuemin', 'age': 30}" 如果定義一個類,實現了該介面,並定義了方法 class now implements JsonSerializable{ $name = 'dongxuemin'; $age = 30; public function jsonSerialize(){ return '我才是要編碼的資料'; } ... } json_encode(new now()); // 輸出 "我才是要編碼的資料" 以上2個例子,我們很明顯就知道區別了。實現了 JsonSerializable 介面的類,json_encode()時,會去查詢 'jsonSerialize()' 方法,有的話,會將返回的內容,作為json_encode()的輸入,而不是之前預設的將物件的屬性作為json_encode()的輸入 laravel的資料庫物件就使用了它(好多優秀的框架,應該都實現了它),toJson()方法就是 參考文章: http://www.laruence.com/2011/10/10/2204.html(PHP國內第一人) https://segmentfault.com/a/1190000010449725
相關推薦
json_encode()為null,引發的json相關總結
上次使用 json_decode() 解析從前端複製過來的json資料,發現怎麼都解析不出來,檢視json格式,發現沒問題啊! /* 注意: 之前碰過同樣的問題,有可能是實體引起的!但那應該是針對從其他地方接收到的變數,而非是複製過來的字串!
【spring mvc】後臺的API,測試中,總提示接口實體的某一個字段不能為null,但是明明給值了還提示不能為空
ont TP 報錯 分享 ima 技術 技術分享 圖片 request 實體是這三個字段 接口的實現類Controller 前臺測試給值 依舊報錯 解決方法: 需要添加@RequestBody註解 【spring mvc】後臺的API,
Mysql數據表字段設置了默認值,插入數據後默認字段的值卻為null,不是默認值
才會 默認 自動 nbsp tis 數據 過濾 工具 持久 我將mysql的數據表的某個字段設置了默認值為1,當向該表插入數據的時候該字段的值不是默認值,而是null。 我的錯誤原因: 對數據庫的操作我使用了持久化工具mybatis,插入數據的時候插入的是整個實體,直接
c# 如果一個對象的值為null,那麽它調用擴展方法時為甚麽不報錯
tro img 數據類型 一個 emp void person () rem 如果一個對象的值為null,那麽它調用擴展方法時會報錯嗎? Person p = null ; p.ExtendMethod(); 上述代碼出現的情況不會報錯,剛開始遇到這種情況時很納悶,就去
破解myeclipse時,ACTIVATION_KEY 老是為null,是由於cracker的開啟方式不對
破解myeclipse時,ACTIVATION_KEY 老是為null 首先檢查電腦裡是否配置好jdk只有一個myeclipse,如果有多個的話刪除為只有一個,或者全部刪除重新安裝,注意應在“控制面板”中的“程式與應用”中進行搜尋刪除,這裡可以將mye
java中將物件賦值為null,對垃圾回收有用嗎?
相信,網上很多java效能優化的帖子裡都會有這麼一條:儘量把不使用的物件顯式得置為null.這樣有助於記憶體回收 可以明確的說,這個觀點是基本錯誤的.sun jdk遠比我們想象中的機智.完全能判斷出物件是否已經no ref..但是,我上面用的詞是"
Spring @Autowired註解在非Controller注入為null,Springboot @Reference注入為null解決方案
今天使用activiti的執行流程,使用dubbo想要去呼叫service,發現@Reference為null,研究了好久,嘗試直接連線dao層,注入的也為null。. 可能是我的這個不是controller裡面的 解決辦法 通過新增三個關鍵地方即可解決: 1、在cl
DB中欄位為null,為空,為空字串,為空格要怎麼過濾取出有效值
比如要求取出微信繫結的,沒有解綁的 未繫結,指定欄位為null 繫結的,指定欄位為某個字串 解綁的,有的客戶用的是更新指定欄位為1,有的客戶更新指定欄位為‘1’ 髒資料的存在,比如該欄位為空字串 髒資料的存在,比如該欄位為空格 要怎麼過濾出來? 解綁後指定欄位更新為‘1’ 取出繫結的會員,假設欄位是aa
mybatis查詢返回的物件不為null,但是屬性值為null
返回的物件不為null,但是屬性值為null 程式碼如下: <resultMap id="BaseResultMap" type="com.trhui.ebook.dao.model.MerchantUser"> <id column="MU_ID" jd
java中,只宣告一個物件不賦值,與宣告一個物件並賦為null,有啥區別?
轉自:http://www.oschina.net/question/557858_127408 http://zhidao.baidu.com/link?url=rp_hAuPys2vMPnir0t7IFccKVnwEm8zHI7-wEoBSJXw05SAmKHGOObT
獲取的欄位值是空值或者為null,而你自己的需求就是想要獲取的欄位為一個 * 預設的值
一、業務闡述 在開發中查詢的資料庫結果集,既要連線資料庫、執行資料庫操作、關閉資料庫,還要把結果集的記錄人為的設定到自己封裝的DAO中等一系列的重複程式碼。 本文主要是想解決:使用者只需要得到資料庫連線,寫sql語句,自己封裝dao,其餘的操作由封轉的
hashtable,concurrenthashmap為什麼鍵和值不能為null,而hashmap可以?
因為hashtable,concurrenthashmap它們是用於多執行緒的,併發的 ,如果map.get(key)得到了null,不能判斷到底是對映的value是null,還是因為沒有找到對應的key而為空,而用於單執行緒狀態的hashmap卻可以用cont
linux新建使用者,使用者組相關總結
useradd tomcat_boot #建立tomcat_boot使用者,同時會建立一個同名的工作組tomcat_boot passwd tomcat_boot #設定tomcat_boot使用者密碼 userdel tomcat_boot #刪除tomca
row.getCell()獲取單元格為null,空指標異常
if(row.getCell(j+3) == null){ row.createCell(j+3).setCellValue(new HSSFRichTextString(String.valueOf(resultList.get(j)))); }else {
如果物件的引用被置為null,垃圾收集器是否會立即釋放物件佔用的記憶體?
連結:https://www.nowcoder.com/questionTerminal/fbef4d5971ce4009aa72
alibaba的JSON.toString會把值為null的字段去掉,謹記
sys bold new TE con ali round spa 結果 alibaba的JSON.toString會把值為null的字段去掉,謹記 Map<String,Object> map = new HashMap<>();
Jackson 轉換JSON,SpringMVC ajax 輸出,當值為null或者空不輸出欄位@JsonInclude
當我們提供介面的時候, Ajax 返回的時候,當物件在轉換 JSON (序列化)的時候,值為Null 或者為“”的欄位還是輸出來了。看上去不優雅。 現在我敘述三種方式來控制這種情況。 註解的方式( @JsonInc
資料庫儲存為null時,自定義字元標識。使轉為json資料後,列不丟失或有undefined。
當查詢的資料中,列mno為空時,用“-”代替,也可以用中文之類代替,比如“暫空”,這裡採用“-”代替。 只需要在sql語句新增IFNULL(m.mno,’-‘) AS mno進行處理即可,例如: SELECT IFNULL(m.mflighno,'-') AS mflighno,m.*
php使用json_encode()無法將json字串轉換為陣列.轉換的結果的為null
要是使用json_decode() 字串的格式要如下: [ { "a": "hello", "b" : "world" } ]; 如果使用json_decode得到是null ,那麼很可能是 鍵名 沒有加引號 導致 ,要想上面的例子 鍵名a 有加引號這樣才能成功 的轉
json序列化時,不序列化值為null和""的欄位
<!-- jackson --> <dependency> <groupId>com.fasterxml.jackson.core</groupId>