在PHP中解析时需要在JSON提要中保留反斜杠

时间:2014-11-02 15:24:31

标签: php json parsing

这是我们的一个JSON提要的示例:

{"wiggins": {
  "id": "bkstir-04380-wdr-q",
  "alertcolour": "yellow",
  "infohvr": "",
  "infoclk": "",
  "warning": "10",
  "warnhvr": "There are 10 files stuck in \\server.domain.co.uk\Country\Dept\Output",
  "warnclk": "\\server.domain.co.uk\Country\Dept\Output",
  "process": "abc-app-015 Spooler",
  "processhvr": "",
  "processclk": "http://xyz-abc-001.svr.domain.co.uk/monitors/39.html"
}}

反斜杠阻止php显示它,如果我有一个没有任何反斜杠的JSON然后它们显示正常,但我需要在那里显示页面的人需要转到链接的斜杠。为了让它现在正常工作,我还试过了stipslashes(),但它并没有奏效。任何人都可以提供任何建议吗?谢谢。这是解析文件的代码(正如我所说,只要没有反斜杠,这个位就可以工作):

$path = "../../Admins/VBScript/Monitors/JSON/"; //where JSONs are stored
foreach (glob($path."*.json") as $file){ //loop through each file
$json = file_get_contents($file); //get JSON files
$data = json_decode($json, true); //parse the file

JSON文件在我测试过的网站上恢复有效。

2 个答案:

答案 0 :(得分:3)

您的JSON无效。反斜杠必须像这样转义:

{"wiggins": {
  "id": "bkstir-04380-wdr-q",
  "alertcolour": "yellow",
  "infohvr": "",
  "infoclk": "",
  "warning": "10",
  "warnhvr": "There are 10 files stuck in \\\\server.domain.co.uk\\Country\\Dept\\Output",
  "warnclk": "\\\\server.domain.co.uk\\Country\\Dept\\Output",
  "process": "abc-app-015 Spooler",
  "processhvr": "",
  "processclk": "http://xyz-abc-001.svr.domain.co.uk/monitors/39.html"
}}

根据this question你可以使用

$json = str_replace('\\', '\\\\', $json);

修复你的JSON。

答案 1 :(得分:0)

根据现行标准,您的JSON数据不被视为有效JSON。使用JSONLint您的数据会抛出解析器错误,直到所有斜杠都被转义。您可以在此处阅读此标准:
JSON Data Standard
上述信息位于第4页,需要转发前向和后向固定字符。 JSON_ENCODE()和JSON_DECODE()将负责删除转义,因此HTML链接的格式应该有效。