【发布时间】:2012-07-30 20:27:37
【问题描述】:
我有无效的外部 json 数据,名称周围没有双引号。
例子:
{
data: [
{
idx: 0,
id: "0",
url: "http://247wallst.com/",
a: [
{
t: "Title",
u: "http://247wallst.com/2012/07/30/",
sp: "About"
}
],
doc_id: "9386093612452939480"
},
{
idx: 1,
id: "-1"
}
],
results_per_page: 10,
total_number_of_news: 76,
news_per_month: [20, 0, 8, 1, 1, 2, 0, 2, 1, 0, 0, 1, 1, 0, 5, 1, 1, 1, 0, 2, 5, 16, 7, 1],
result_start_num: 2,
result_end_num: 2,
result_total_articles: 76
}
正如你看到的很多名称,如 data、idx、id、url 和其他名称都没有双引号,所以这使得这个 json 无效。 如何使这个外部 json 有效?我已经尝试过 str_replace,将 '{' 替换为 '{"' 并将 ':' 替换为 '":' 在不带引号的名称周围添加双引号,但这会弄乱一些已经双引号的变量。
如何使这个 json 有效,以便我可以使用 PHP json_decode 读取这些数据?我对 preg_replace 不是很熟悉..
有效的 json 格式如下:
{
"data": [
{
"idx": 0,
"id": "0",
"url": "http://247wallst.com/",
"a": [
{
"t": "Title",
"u": "http://247wallst.com/2012/07/30/",
"sp": "About"
}
],
"doc_id": "9386093612452939480"
},
{
"idx": 1,
"id": "-1"
}
],
"results_per_page": 10,
"total_number_of_news": 76,
"news_per_month": [20, 0, 8, 1, 1, 2, 0, 2, 1, 0, 0, 1, 1, 0, 5, 1, 1, 1, 0, 2, 5, 16, 7, 1],
"result_start_num": 2,
"result_end_num": 2,
"result_total_articles": 76
}
请建议我一些 php preg_replace 函数。
数据来源: http://www.google.com/finance/company_news?q=aapl&output=json&start=1&num=1
【问题讨论】:
-
这个数据是在哪里构建的?它是你控制的脚本吗?
-
这可能不是特别有用,但是虽然您显示的不是有效的 JSON,但它 是 有效的 Javascript - 因此,如果您可以通过 Javascript 触发它,然后对其进行 JSON 编码再次,它会让你的生活变得很轻松。如果你有方便的 Node.js,这可以通过一个简单的
exec()调用来完成。虽然这并不是一个很好的长期解决方案。 -
我不控制这个脚本的构建。