2010-09-26 48 views
1

我有一个格式与JSON格式相似的文本文件,但是打印/查看友好格式,我想将该字符串转换为有效的JSON。 基本上,我想使用PHP5读取文件,并调用json_decode来反序列化字符串。 但是,json_decode无法解析“打印友好”的json字符串。将JSON打印格式转换为有效的JSON

我收到错误4无效或格式错误的JSON。

它看起来像其他人也有类似的问题,因为我:PHP json_decode() returns NULL with valid JSON?

我使用记事本++写的JSON文件。

所以,我怎么能转换

FROM:

{ 
    "data": [ 
     { 
      "thumbImg": "thumbImg", 
      "street": "street", 
      "city": "Fort Worth", 
      "state": "Texas", 
      "zip": "76192-0001", 
      "url": "url" 
     } 
    ] 
} 

TO:

{"data":[{"thumbImg": "thumbImg", "street": "street", "city": "Fort Worth", "state": "Texas", "zip": "76192-0001", "url": "url"}] 

我甚至试着做以下几点:

<?php 
$filename = "links.json"; 
$file = fopen($filename, "r"); 

$lines = file($filename); 

$data = ""; 
; 
foreach ($lines as $line_num => $line) { 
    $formatted = trim($line); 
    $formatted = str_replace("\r", "", $formatted); 
    $formatted = str_replace("\n", "", $formatted); 
    $data .= $formatted;   
} 

$json = json_decode($data, true); 
?> 

我做了一个var_dump的结果json字符串和http://jsonlint.com/标记为有效的json;然而,由于某种原因,json_decode无法反序列化json字符串。

谢谢!

解决方案 我将文本文件的编码设置为无BOM的UTF-8,现在它工作正常。谢谢你们!

+0

的数据分析,没有任何问题,我。 – Quentin 2010-09-26 07:20:24

+0

当我从文本文件中读取时(无需重新格式化文本),它起作用。听起来你已经开始使用“我在阅读文件时遇到问题”,但是最终你问“我该如何重新格式化这个文件?”,这是实际问题的几个步骤,导致了一个问题:对任何人都没有帮助。 – Quentin 2010-09-26 07:25:34

+2

'json_decode'完美适合我:http://codepad.org/wcNFa2F5你应该尝试使用'file_get_contents'来读取文件:http://php.net/manual/en/function.file-get-contents.php – 2010-09-26 07:26:06

回答

5
<?php 
$filename = "links.json"; 
$file = file_get_contents($filename);  

$json = json_decode($file, true); 
?> 


参考文献:
- file_get_contents()
- json_decode()

+0

谢谢。事实证明,我的文本文件的文件编码是关闭的。我将源文件的编码更改为无BOM的UTF-8,现在它效果很好!谢谢大家的支持! – Abe 2010-09-26 07:53:24