javascript中的JSON序列化和php反序列化
JSON serialization in javascript and php deserialization
你好,我在反序列化javascript中序列化的JSON时遇到问题。我在网页上有表格,每一行都是一个产品(表格中的输入、选择、复选框):
name, price, total_count, ...
name2, price2, total_count2, ...
...
我取了一个表单并用javascript将其序列化(函数ajaxLoad是正常的缩写jQuery函数$.ajax(…),它在其他地方正常工作)
var form = $('#myForm');
form.submit(function(event){
event.preventDefault();
ajaxLoad(
form.attr('action'),
form.parent(),
{jsonData : JSON.stringify(form.serializeArray())}
);
});
在php中,数据被接收,我的代码如下:
$data = json_decode($jsonData, true);
$this->template->data = print_r($data,1);
它返回类似的东西:
Array
(
[0] => Array
(
[name] => products[0][cor_projectProduct_name]
[value] => 1ks Replika Kádnerova jáchymovského tolaru stand BJ
)
[1] => Array
(
[name] => products[0][url]
[value] => http://some-nice-url.cz
)
[2] => Array
(
[name] => products[0][cor_projectProduct_ean]
[value] =>
)
[3] => Array
(
[name] => products[0][cor_projectProduct_internalCode]
[value] =>
)
[4] => Array
(
[name] => products[0][cor_project_id]
[value] => 6
)
[5] => Array
(
[name] => products[0][cor_projectProduct_keywordAllowed]
[value] =>
)
...
但是我想要一个对象数组。
我也尝试过用form.serialize
序列化表单,但返回的结果更糟糕——url编码的字符串,我无法解码。
当我试图通过POST方法将数据作为数组发送,然后从$_POST
在php中读取数据时,它起了作用,但由于POST限制,一些数据丢失了,所以最好将其作为序列化字符串发布,但我不知道如何以及如何在php中反序列化它。
编辑:好吧,也许解释得不好,结果我需要的是对象数组:
Array
(
[0] => stdClass Object
(
[cor_projectProduct_name] => 1ks Replika Kádnerova jáchymovského tolaru stand BJ
[url] => http://www.ceske-mince.cz/ceska_mincovna/1997/replika-kadnerova-jachymovskeho-tolaru-stand/
[cor_projectProduct_ean] =>
[cor_projectProduct_internalCode] =>
[cor_project_id] => 6
[cor_projectProduct_keywordAllowed] =>
...
)
[1] => stdClass Object
(
[cor_projectProduct_name] => 1ks Replika Kádnerova jáchymovského tolaru stand BJ
...
)
...
或者与关联数组相同,
要获得对象而不是数组,请使用
$data = json_decode($jsonData, true);
而不是
$data = json_decode($jsonData, false);
演示:https://eval.in/207258
也许可以看看这个答案。。。
基本上将数组(在json_decode之后)转换为对象。
不需要序列化表单帖子。如果需要处理长数据,可以在php设置中更改post-limit。使用unserialize将序列化数据转换为密钥=>对数组
但是对于json-format中的接收和编码(您使用jsondecode而不首先使用json_encode以json字符串格式格式化任何数组)。
在第一个视图中检查返回的数组是否对键名有效。但如果您只需要从模板对象设置数据属性,则只需要执行$this->template->data = $_POST;
编辑:
拥有一系列产品:
$objArray = array();
foreach($_POST['products'] as $product) {
$objArray['name'] = $product[cor_projectProduct_name];
$objArray['url'] = $product[url];
$objArray['ean'] = $product[cor_projectProduct_ean];
$objArray['internalCode'] = $product[cor_projectProduct_internalCode];
...
}
好吧,我自己想好了怎么做:
在javascript中,除了带数据的行之外,所有相同的内容都必须更改为:
{jsonData : JSON.stringify(form.serialize())}
在PHP中,我可以在调用parse_str()
函数后访问接受的数据,所以它应该是这样的:
public function actionSubmitedImportedProducts($jsonData){
parse_str(json_decode($jsonData));
$this->template->data = print_r($products,1);
}
天哪,太差劲了:-D。
- 有没有一个Nodejs库可以序列化和反序列化命名组件的路径(比如URL路径名)
- 是否可以在javascript中反序列化java对象
- 如何在C#中反序列化json对象
- Nservicekit反序列化
- 无法反序列化 java.util.List 的实例VALUE_STRING
- 正在反序列化jQuery.Serialize的结果(到数组,而不是到窗体)
- 使用 JavaScript 进行反序列化
- Three.js-如何反序列化几何体.toJSON()?(几何体.fromJSON在哪里?)
- .NET服务中的JSON反序列化-can'不能解决这个问题
- 如何:从javascript反序列化C#对象
- 护照.js:如何避免序列化和反序列化用户
- 如何在 Express/Node.js 中反序列化 JSON 数据
- 在 javascript 中序列化和反序列化数组
- PHP 反序列化 JS 序列化的变量字符串
- Javascript:反序列化对象和混合方法
- javascript中的JSON序列化和php反序列化
- 如何在node.js中反序列化PHP会话
- PHP反序列化Javascript序列化字符串
- JS反序列化PHP序列化的数组
- 用Javascript反序列化PHP数组