gpt4 book ai didi

php - 迭代 KEYLESS JSON 数组?

转载 作者:行者123 更新时间:2023-11-30 17:57:00 25 4
gpt4 key购买 nike

我正在构建购物车并使用 cookie 将购物车内容存储在 JSON 对象中。

在每个页面上,我需要使用 Javascript 检索 cookie、解析 JSON 并遍历每一行,以在购物篮摘要中显示所描述的产品。

我决定不在数组中使用键,因为如果我有每个位置指定的记录,为什么我需要将它存储在 cookie 中。我认为这是一个聪明的主意,但现在我所有的搜索结果都是使用这些键的建议。

这是 JSON 的示例:

{
"9999.9999":["CentOS6",2,"0.5",150,"23.90"],
"0002.0004":["Support5","","3",5,"12.99"],
"9999.9999":["UbuntuServer12.04LTS",1,"1",220,"42.60"]
}

我希望能够访问第二条记录的“价格”(位于每行的最后一个字段中),如下所示:

basket = JSON.parse(basket);
price = basket[1][4];

这似乎行不通。

这个问题实际上有两个部分。

  1. 如何直接从篮子中挑选一个值?
  2. 如何遍历它,让我依次对每一行进行操作?

如果您想知道第一个字段。那是产品的SKU。之所以有两个“9999.9999”,是因为这是一个保留编号,表示该产品是“定制”产品(不直接指目录项)。

更新

根据下面@Samer 的回答,我更新了代码以使用数组,如下所示:

JSON 现在看起来像这样:

[
["9999.9999","CentOS6",2,"0.5",150,"23.90"],
["0002.0004","Support5","","3",5,"12.99"],
["9999.9999","UbuntuServer12.04LTS",1,"1",220,"42.60"]
]

我现在正尝试从 cookie 中访问它,如下所示:

var basket = readCookie('basket');
basket = JSON.parse(basket);
alert( 'Price of item 2 =' + basket[1][5] );

只是,我得到的是“商品 2 的价格 = 未定义”,而不是提醒,“商品 2 的价格 = 12.99”。

我想知道我做错了什么?

更新 2

仍然有这个问题。也许我应该解释一下我们是如何将数据放入 cookie 中的。

cookie 上的数组可以使用 PHP 在服务器上更新(添加自定义项时),或者在添加目录项时使用 Javascript 在客户端上更新。

目前,我专注于服务器端添加的项目。我正在使用以下代码添加 cookie:

<?
extract($_POST, EXTR_SKIP);

// Get contents of existing basket (if any) minus last ']'
// so that it's ready to be added to.

if (isset($_COOKIE['basket'])) {

$basket = json_decode($_COOKIE['basket']);
$chars = strlen($basket)-1;
//echo "<pre>".var_dump($basket)."</pre>";

$cookieVal = substr($basket, 0, $chars);

$cookieVal .= ",
[\"9999.9999\",\"$sltOS\",$vcpuPoints,\"".$ramPoints."\",$storagePoints,\"".$baseServerCostMonthUSD."\"]]";

$cookieVal = json_encode($cookieVal);
/*
* Sample format
*
[["9999.9999","CentOS6",2,"0.5",150,"23.90"],
["0002.0004","Support5","","3",5,"12.99"],
["9999.9999","UbuntuServer12.04LTS",1,"1",220,"42.60"]]
*
*/

} else {

$cookieVal = json_encode("[[\"9999.9999\",\"$sltOS\",$vcpuPoints,\"".$ramPoints."\",$storagePoints,\"".$baseServerCostMonthUSD."\"]]");

}

$exp = time()+3600; // sets expiry to 1 hour;
setcookie ( 'basket' , $cookieVal, $exp, '/' );

然后客户端读取 cookie,我有这个,它在页面加载时调用:

function initBasket() {

var basket = readCookie('basket');

if (isJSON(basket)) {

// We'll populate the basket

basket = JSON.parse(basket);
alert(basket[1][5]);

} else {

$('#sList').html('Your basket is empty.');
return;

}

}

更新 3终于让它工作了。感谢您的帮助。

也许代码可以帮助其他人,所以我在下面包含了最终代码:

PHP:

if (isset($_COOKIE['basket'])) {

$cookieVal = json_decode($_COOKIE['basket']);
$cookieVal[] = array
(
"9999.9999",
$sltOS,
$vcpuPoints,
$ramPoints,
$storagePoints,
$baseServerCostMonthUSD
);
$cookieVal = json_encode($cookieVal);

} else {

$cookieArr[] = array
(
"9999.9999",
$sltOS,
$vcpuPoints,
$ramPoints,
$storagePoints,
$baseServerCostMonthUSD
);
$cookieVal = json_encode($cookieArr);

}

// Save VPS choice in basket cookie
$exp = time()+3600; // sets expiry to 1 hour;
setcookie ( 'basket' , $cookieVal, $exp, '/' );

Javascript:

function initBasket() {

var basket = readCookie('basket');

if (isJSON(basket)) {

// We'll populate the basket
basket = JSON.parse(basket);
alert(basket[1][5]);

} else {

$('#sList').html('Your basket is empty.');
return;

}

}

最佳答案

如果 JSON 没有键,那么它就是一个数组,只需使用数组而不是键/值对来构建您的数据。

var data = [
['CentOS', ''],
['Another Product', ...],
];

更新:

现在根据您的新答案,您似乎正在尝试 JSON.parse实际的数组。 JSON.parse通常接受一个包含数组的字符串值,然后将其解析为实际数组。

要了解我的意思,请获取您的数据数组并通过 JSON.stringify 运行它你会看到输出,同样的输出你可以通过 JSON.parse 运行它

关于php - 迭代 KEYLESS JSON 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17915871/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com