【发布时间】:2020-07-01 22:28:20
【问题描述】:
我的错误是:警告:json_decode() 期望参数 1 是字符串,给定数组。
我想在我的数据库中保存实体。只有在 JSON 文件中放入一个元素但我想运行 JSON 文件并保存所有元素时,我才会成功。我不能做一个循环。
我有一个这样的 JSON 文件:
[
{
"nom": "tablette",
"url": "http://www.cdiscount.com/opa.aspx/?trackingid=idXtspN-9-e2eKH4rjay8tNG2NeGkp5QZdUVk2714qK1CHkFJHIjbIK2itfMOQIL&action=product&id=MD513NFA&offerid=175431240",
"prix": 199.9900,
"description": "Tablette tactile avec écran 9,7\" capacitif - Processeur Apple A6X bicoeur avec processeur graphique quadricoeur- Stockage 16Go - WiFi 802.11 b/g/n - Camera avant 1,2Mpixels - Caméra arrière 5Mpixels - Connecteur Lightning reversible - Jusqu’à 10h d'autonomie - Garantie 1 an",
"image": "http://i2.cdscdn.com/pdt2/N/F/A/1/700x700/MD513NFA.jpg"
},
{
"nom": "autre",
"url": "http://www.cdiscount.com/opa.aspx/?trackingid=idXtspN-9-e2eKH4rjay8tNG2NeGkp5QZdUVk2714qK1CHkFJHIjbIK2itfMOQIL&action=product&id=MD513NFA&offerid=175431240",
"prix": 20.0,
"description": "Autre Tablette tactile avec écran 9,7\" capacitif - Processeur Apple A6X bicoeur avec processeur graphique quadricoeur- Stockage 16Go - WiFi 802.11 b/g/n - Camera avant 1,2Mpixels - Caméra arrière 5Mpixels - Connecteur Lightning reversible - Jusqu’à 10h d'autonomie - Garantie 1 an",
"image": "http://i2.cdscdn.com/pdt2/N/F/A/1/700x700/MD513NFA.jpg"
}
]
在我的 Symfony 4 代码下方:
public function store(Request $request, SerializerInterface $serializer, EntityManagerInterface $em)
{
$jsonRecu =file_get_contents("api.json");
$someArray = json_decode($jsonRecu, true);
print_r($someArray);
foreach ($someArray as $item) {
$article= $serializer->deserialize($item, Article::class, 'json');
$em->persist($article);
$em->flush();
return $this->json($article, 201, []);
}
}
当我做 var_dump($jsonRecu); 时 $jsonRecu 的内容是:
string(1260) "[ { "nom": "tablette", "url": "http://www.cdiscount.com/opa.aspx/?trackingid=idXtspN-9-e2eKH4rjay8tNG2NeGkp5QZdUVk2714qK1CHkFJHIjbIK2itfMOQIL&action=product&id=MD513NFA&offerid=175431240", "prix": 199.9900, "description": "Tablette tactile avec écran 9,7\" capacitif - Processeur Apple A6X bicoeur avec processeur graphique quadricoeur- Stockage 16Go - WiFi 802.11 b/g/n - Camera avant 1,2Mpixels - Caméra arrière 5Mpixels - Connecteur Lightning reversible - Jusqu’à 10h d'autonomie - Garantie 1 an", "image": "http://i2.cdscdn.com/pdt2/N/F/A/1/700x700/MD513NFA.jpg" }, { "nom": "autre", "url": "http://www.cdiscount.com/opa.aspx/?trackingid=idXtspN-9-e2eKH4rjay8tNG2NeGkp5QZdUVk2714qK1CHkFJHIjbIK2itfMOQIL&action=product&id=MD513NFA&offerid=175431240", "prix": 20.0, "description": "Autre Tablette tactile avec écran 9,7\" capacitif - Processeur Apple A6X bicoeur avec processeur graphique quadricoeur- Stockage 16Go - WiFi 802.11 b/g/n - Camera avant 1,2Mpixels - Caméra arrière 5Mpixels - Connecteur Lightning reversible - Jusqu’à 10h d'autonomie - Garantie 1 an", "image": "http://i2.cdscdn.com/pdt2/N/F/A/1/700x700/MD513NFA.jpg" } ]"
编辑
下面的代码可以正常工作:
public function store(Request $request, SerializerInterface $serializer, EntityManagerInterface $em)
{
$jsonRecu =file_get_contents("api.json");
$arrayOfProperObjects = $serializer->deserialize($jsonRecu, Article::class.'[]', 'json');
var_dump($arrayOfProperObjects);
foreach ($arrayOfProperObjects as $article) {
$em->persist($article);
$em->flush();
}
return $this->json($article, 201, []);
}
感谢您的帮助
【问题讨论】:
-
$jsonRecu的内容是什么?使用var_dump($jsonRecu); -
我不认为错误来自上面显示的代码。
-
报错的行和文件在哪里?请使用此信息更新您的问题。
-
@Nelly 所以它抱怨的是
$data,而不是$jsonRecu。您问题的顶部似乎没有任何相关内容。所以现在你需要向我们展示$data的内容并解释你期望json_decode($data, $associative, $recursionDepth, $options);做什么。 -
@PatrickQ Nelly 提供了 symfony 反序列化器中的代码,而不是他们代码中导致错误的行,这必须是
$serializer->deserialize()调用。他们添加的代码当然没有帮助。问题是由于期望字符串的反序列化调用引起的,而 json_decode 已经将整个字符串转换为数组数组,从而为反序列化调用提供了一个数组。