在textarea中POST后解码JSON

时间:2015-04-08 14:59:25

标签: javascript php json

我在使用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']);

的PHP代码

我收到的错误是:Invalid argument supplied for foreach()但这是因为我试图在从JSON转换后遍历数组。

4 个答案:

答案 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_dumpprint_r来查看变量的真实含义及其包含的内容会很有用。

答案 3 :(得分:0)

在与代码斗争3天之后,我发现它:json_decode或eval无法处理"这是在帖子字符串中引用的方式,但它显示为"我在浏览器中进行变量转储时很难调试。所以要解决我添加的代码:

$_POST['product_options'] = str_replace('"', '"', $_POST['product_options']);

对我来说似乎是一个愚蠢的PHP错误:{