我在使用PHP解码JSON字符串时遇到问题,我很确定我知道是什么导致了它,但不知道如何修复它。我将一个我转换为JSON的数组放入一个隐藏的textarea,然后将其与其他信息一起发布到我的PHP脚本中。
以下是放置在文本区域中的JSON字符串示例:我使用$("#product_options").val(JSON.stringify(productOptions));
将JSON放入文本框中。
[{
"optionID": "217",
"optionValueID": ["3"]
}, {
"optionID": "218",
"optionValueID": ["5"]
}, {
"optionID": "223",
"optionValueID": ["8", "11"]
}, {
"optionID": "208",
"optionValue": ["test"]
}, {
"optionID": "209",
"optionValue": ["zxvsdfg"]
}, {
"optionID": "219",
"optionValue": ["2011-02-20"]
}, {
"optionID": "221",
"optionValue": ["22:25"]
}, {
"optionID": "220",
"optionValue": ["2011-02-20 22:25"]
}]
解码很好,但是一旦我发布并使用$_POST['json_array']
在PHP中读取字段的值,它就不会解码。以下是转换为JSON的整个帖子:
{
"full_name": "sdfg",
"phone": "sdfg",
"email": "sdfg",
"notes": "sdgf",
"product_id": "42",
"product_options": "[{"
optionID ":"
217 ","
optionValueID ":["
3 "]},{"
optionID ":"
218 ","
optionValueID ":["
5 "]},{"
optionID ":"
223 ","
optionValueID ":["
8 ","
11 "]},{"
optionID ":"
208 ","
optionValue ":["
test "]},{"
optionID ":"
209 ","
optionValue ":["
zxvsdfg "]},{"
optionID ":"
219 ","
optionValue ":["
2011 - 02 - 20 "]},{"
optionID ":"
221 ","
optionValue ":["
22: 25 "]},{"
optionID ":"
220 ","
optionValue ":["
2011 - 02 - 20 22: 25 "]}]"
}
编辑:
这是我用来解码JSON $productOptions = json_decode($_POST['product_options']);
。
我收到的错误是:Invalid argument supplied for foreach()
但这是因为我试图在从JSON转换后遍历数组。
答案 0 :(得分:1)
更好的方法可能是使用 html_entity_decode()
来转换任何 html 实体,例如:
$_POST['product_options'] = html_entity_decode($_POST['product_options']);
答案 1 :(得分:0)
服务器端和客户端仅与字符串通信。
在发布值之前,您可以在值上调用JSON.stringify()以获取要发送到服务器的有效可转换字符串
获得编码的json后,你应该解码编码的json json_decode()。我这样你将从字符串中解析出一个PHP变量。 link here for further information
答案 2 :(得分:0)
我的猜测是你要使用foreach
迭代数据结构,但你真正尝试的是迭代stdClass
类型的对象,你不能实现Iterator
} class。
首先你想要做的是通过将json_decode的第二个参数设置为true来将json转换为associative array
,如下所示:
json_decode($string, true)
当您收到类似这样的错误时,使用var_dump
或print_r
来查看变量的真实含义及其包含的内容会很有用。
答案 3 :(得分:0)
在与代码斗争3天之后,我发现它:json_decode或eval无法处理"这是在帖子字符串中引用的方式,但它显示为"我在浏览器中进行变量转储时很难调试。所以要解决我添加的代码:
$_POST['product_options'] = str_replace('"', '"', $_POST['product_options']);
对我来说似乎是一个愚蠢的PHP错误:{