*这个问题是因为我当时无法控制JSON输出而创建的。所以不得不使用JavaScript。如果您可以控制JSON,请参阅Mike Brant的回答。但是Oka的回答解决了我的问题,这是一个很好的解决方案..
我试图创建一个不包含JSON双引号的数组。
我正在获取JSON并尝试构建一个可以将非引用项目推送到数组的系统。
由于我无法控制JSON,我将其变为字符串并删除双引号并再次将其拆分为数组。
问题是这仍然输出双引号?
var artistJSON = '<?php echo $favourites ? json_encode($favourites->artists) : '[]' ?>';
var artistIds = artistJSON.replace(/"/g, '');
var artistAry = artistIds.split(',');
console.log(artistJSON);
console.log(artistIds);
console.log(artistAry);
控制台的结果;
["31","41","56","38","","27"]
[31,41,56,38,,27] //This is a string. I want an array.
["[31", "41", "56", "38", "", "27]"]
https://jsfiddle.net/1pu6nqu2/
任何帮助都会非常感激。
*只是为了确认,我的游戏目标是从数组中删除双引号。
答案 0 :(得分:2)
如果您使用PHP中的json_encode()
来动态填充数据结构,则不应填充到字符串中然后解析该字符串,只需直接写入对象/数组文字。所以改变这个:
var artistJSON = '<?php echo $favourites ? json_encode($favourites->artists) : '[]' ?>';
到这个
var artist = <?php echo $favourites ? json_encode($favourites->artists) : '[]' ?>;
我所做的就是删除单引号(并将变量名更改为更合适的名称)。现在你有了一个数据结构,你可以直接在javascript中使用,而无需额外的解析。
答案 1 :(得分:2)
假设您正在尝试将字符串化JSON
转换为数组,并将数组中的字符串转换为数字。您可以使用.map()
和.filter()
的某种组合来实现此目标。
http://jsbin.com/yojibeguna/1/edit?js,console
var artistJSON = JSON.parse('["31","41","56","38","","27"]')
.map(function (e) { return parseInt(e); })
.filter(function (e) { return isFinite(e); });
console.log(artistJSON, typeof artistJSON[0]);
答案 2 :(得分:1)
如果json数据已经存储为JSON数据,那么不需要用php重新编码它。只需将其回显,它就会被分配给您的变量artistJSON
。
示例:
var artistJSON = <?php echo $favourites ? ($favourites->artists) : '[]' ?>;
编辑:正如Mike Brant所说,如果它尚未存储为JSON文字数据(在数据库中,或者诸如此类),则需要对其进行重新编码。我假设它是。
答案 3 :(得分:0)
您只需运行JSON.parse
即可将字符串转换为数组。
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse
答案 4 :(得分:0)
试试这个:
var artistJSON = '<?php echo $favourites ? json_encode($favourites->artists) : '[]' ?>';
var artists = JSON.parse( artisanJSON );
console.log( artists );