簡體   English   中英

將 PHP 關聯數組轉換為 JSON 對象 - 值中的空格會導致 JSON 格式錯誤

[英]Converting PHP Associative array to JSON object - spaces in value results in malformed JSON

我在 PHP 中構建了一個數組並將其轉換為 JSON,然后我使用 onclick 事件處理並通過 AJAX 發送到另一個文件。

問題是 php 數組中的某些值中有空格。 這似乎破壞了 JSON 對象,這意味着我的 AJAX 調用失敗了。

下面是一段代碼,可以嘗試詳細說明:

//PHP Array looks like this:

            Array
            (
                [card_id] => 1
                [img_id] => 11
                [card_name] => Layout1retro_original
                [card_qty] => 1
                [img_thumb] => albums/160915_E165/thumbs/011_cover-lp-cd_originalDPP_Polaroid.jpg
                [img_hires] => 
                [img_full] => albums/160915_E165/images/011_cover-lp-cd_originalDPP_Polaroid.jpg
                [media] => retro
                [finish] => Perl290
                [size] => original
                [backing] => 
                [can_crop] => 
                [needs_to_be_cropped] => 1
                [been_cropped] => 
                [aspect_ratio] => 0
                [offer_CMF] => 
                [retro-name] => A value
            )

問題key => val對是retro-name JSON 打破了Avalue之間的空間。

我使用json_encode將數組轉換為 JSON 對象以通過 Javascript 傳遞: stripslashes(json_encode($array))

然后我將它作為data attribute添加到 html 元素中,以便我可以使用onclick事件獲取它。

這里是數據屬性中斷的地方: [removed excess code for clarity...] "retro-name":"A" value"}

請注意,它在A之后添加了一個結束" 。這會破壞 JSON 對象的其余部分,因此我的 AJAX 調用失敗。

我怎樣才能解決這個問題?

我最好的猜測是因為 JSON 是在用雙引號括起來的數據屬性中呈現的,這在 HTML 中很常見。 而不是雙引號,請嘗試單引號。 PHP 輸出帶雙引號的 JSON。

如果這不起作用,請您舉例說明如何使用 JSON 呈現數據屬性來更新您的問題。

如果我要猜測,它是stripslashes()刪除(假定)轉義的" A in A" value之后的斜線。 我幾乎可以肯定,原始數據中的"前面有一個\\ ,您沒有逐字向我們展示。

一種不同的方法:

只需將card_id放在卡片 div 中

<div class="print-wrap has-size" data-card_id="<?=$array['card_id'];?>">

然后將卡片數據傳遞給JS中的一個變量

<script>var card_data['<?=$array["card_id"]?>'] = <?=json_encode($array);?>;</script>

然后你有你的數據和 div 的關系。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM