1

我有以下我试图在 PHP 中解析

它是 JSON,但带有前导 'u'(可能是 python 指示符,但我不确定)将这些转换为有效 JSON 的最快方法是什么?或者这是 PHP 应该能够解析的已经有效的 JSON?

{u'_id': u'fruit',
               u'etags': [{u'score': 3.612, u'tag': u'apple'},
                          {u'score': 1.443, u'tag': u'banana'},
                          {u'score': -0.833, u'tag': u'cherry'},
                          {u'score': -2.048, u'tag': u'orange'}]}

编辑:我确实在 PHP 中收到“语法错误,格式错误的 JSON”,所以有些东西是关闭的,但它可能不是 'u'

编辑:不是一个很好的答案,但这对我来说是个窍门:

$json = str_replace("u'", "'", $json);
$json = str_replace("'", '"', $json);
4

2 回答 2

5

你在这里做错了什么。假设你在 python 中有这样的东西

data = {u'_id': u'fruit',
           u'etags': [{u'score': 3.612, u'tag': u'apple'},
                      {u'score': 1.443, u'tag': u'banana'},
                      {u'score': -0.833, u'tag': u'cherry'},
                      {u'score': -2.048, u'tag': u'orange'}])

你目前正在做相当于

print repr(data)

你应该这样做:

import json
print json.dumps(data)

您正在解析的字符串不是 JSON,因为它:

  • 有一个u不应该的地方
  • 使用'而不是"
  • 不编码Nonenull
  • ...

由于您不控制数据源,因此您别无选择,只能在输入上调用 python 解释器:

import ast
import json

bad_json = get_from_server()
data = ast.literal_eval(bad_json)
print json.dumps(data)
于 2013-08-09T18:58:07.700 回答
0

不是一个很好的答案,但这对我来说是个窍门:

$json = str_replace("u'", "'", $json);
$json = str_replace("'", '"', $json);
于 2013-08-14T05:04:01.290 回答