2013-07-23 32 views
0

我想解析這個json '{"options":"[{\"order\":\"1\"},{\"skill\":\"\\n wajghjk \"},{\"order\":\"2\"},{\"skill\":\"\\n aswedrty \"},{\"order\":\"3\"},{\"skill\":\"\\n skill1 \"},{\"order\":\"4\"},{\"skill\":\"\\n wasedjk \"},{\"order\":\"5\"},{\"skill\":\"\\n Feldsher \"},{\"order\":\"6\"},{\"skill\":\"\\n wasedjk \"},{\"order\":\"7\"},{\"skill\":\"\\n Autotransfusionist \"},{\"order\":\"8\"},{\"skill\":\"\\n Feldsher \"},{\"order\":\"9\"},{\"skill\":\"\\n Autotransfusionist \"}]"}'。使用代碼如何在php中解析json?

<?php 
$json = '{"options":"[{\"order\":\"1\"},{\"skill\":\"\\n      wajghjk     \"},{\"order\":\"2\"},{\"skill\":\"\\n      aswedrty     \"},{\"order\":\"3\"},{\"skill\":\"\\n      skill1     \"},{\"order\":\"4\"},{\"skill\":\"\\n      wasedjk     \"},{\"order\":\"5\"},{\"skill\":\"\\n      Feldsher     \"},{\"order\":\"6\"},{\"skill\":\"\\n      wasedjk     \"},{\"order\":\"7\"},{\"skill\":\"\\n      Autotransfusionist     \"},{\"order\":\"8\"},{\"skill\":\"\\n      Feldsher     \"},{\"order\":\"9\"},{\"skill\":\"\\n      Autotransfusionist     \"}]"}'; 

$decode = json_decode($json, true); 
$a=array(); 
echo '<br/>'; 
foreach($decode['options'] as $a) 
{ 
    echo $a['order'];echo '<br/>'; 
    echo $a['skill'];echo '<br/>'; 
} 
?> 

但它顯示錯誤,無法解析。有沒有更好的方法來從這個JSON獲得秩序和技能的價值?

+1

你會得到什麼錯誤? –

+0

你能鏈接錯誤嗎? – Parrotmaster

+1

如果您將其粘貼到http://jsonviewer.stack.hu/中,您應該刪除反斜槓 – krampstudio

回答

1

您正在轉義您的雙引號,當字符串由單引號分隔時,它將作爲文字\出現。

要麼在json字符串上運行stripslashes,要麼避免首先轉義。

3

這不是JSON。你正在逃避太多的雙引號。

+1

檢查一下,看看你是否有有效的JSON:http://json.parser.online.fr/ – Zim84

+1

在這裏驗證json。http://jsonlint.com/ –

1

你有兩個json字符串的問題。

  1. 您在單引號字符串內部使用雙引號。但是單引號字符串只有一個轉義序列,那就是\'。 Check this article
  2. 您遇到問題了:'{"options":"[{...}]"}'。你用引號括起了javascript [array],它把它變成了一個字符串。

正確的JSON應該是這樣的:

{"options":[{"order":"1"},{"skill":"\\n wajghjk "},{"order":"2"},{"skill":"\\n aswedrty "},{"order":"3"},{"skill":"\\n skill1 "},{"order":"4"},{"skill":"\\n wasedjk "},{"order":"5"},{"skill":"\\n Feldsher "},{"order":"6"},{"skill":"\\n wasedjk "},{"order":"7"},{"skill":"\\n Autotransfusionist "},{"order":"8"},{"skill":"\\n Feldsher "},{"order":"9"},{"skill":"\\n Autotransfusionist "}]} 

Eval.in demo

1

它顯示錯誤,無法解析。

PHP在調試json時相當薄弱。所有你能做的就是

$json_errors = array(
    "", 
    "The maximum stack depth has been exceeded", 
    "Invalid or malformed JSON", 
    "Control character error, possibly incorrectly encoded", 
    "Syntax error", 
    "Malformed UTF-8 characters, possibly incorrectly encoded", 
); 

$decode = json_decode($json, true); 
if ($error = json_last_error()) 
{ 
    trigger_error($json_errors[$error]); 
} 

雖然,爲了得到你必須有一個有效的JSON字符串值,而不是任意的字符串包含一些報價和斜線。

當然你應該從來沒有手動創建一個json字符串。