jQuery:如何遍历JSON编码的字符串(数组)

30 浏览
0 Comments

jQuery:如何遍历JSON编码的字符串(数组)

我是一个jQuery的初学者,希望有人能帮助我解决这个问题,并给我一些解释。

我有一个Ajax调用,返回一个JSON编码的字符串,每个项目都有两个值,一个是itemID,一个是itemVal - 一个示例如下(使用console.log):

console.log(data)结果:

string(225) "[{"itemID":1,"itemVal":"中国"},{"itemID":2,"itemVal":"法国"},{"itemID":3,"itemVal":"德国"},{"itemID":4,"itemVal":"意大利"},{"itemID":5,"itemVal":"波兰"},{"itemID":6,"itemVal":"俄罗斯"},{"itemID":7,"itemVal":"美国"},...]"

这里的项目数量是不确定的,但如果有一个itemID,就肯定有一个相应的itemVal

itemID是唯一的整数,itemVal是纯文本。

到目前为止,一切都正常,但是现在遇到了问题:

对于这里的每个itemID,我都需要对相应的itemVal做一些操作,比如仅仅将其记录到控制台或者弹出对话框进行测试。

我知道有各种方法可以做到这一点,比如jQuery.each, $.each, for, foreach等等,但是由于我最近才开始学习,我不确定如何遍历它或者如何从中选择单个itemID

我尝试了不同的方法,包括$.parseJSON(data),但都失败了,似乎问题是在解码之前,我的输入是一个二维数组而不是一维数组(希望我在这里使用了正确的术语),这导致它们要么返回错误,要么弹出我字符串的每个字符。

更新 - 根据下面的答案失败的示例

$.ajax({        
    type: "post",   
    url: "ajax.php",
    cache: "false",
    data: {
        node: 'fetchCountries',
        itemIDs: itemIDs // 一组整数
    },
    success: function(data){
        console.log(data);
        var arr = JSON.parse(data);
        $.each($(arr),function(key,value){
           console.log(value.itemVal);
        });
    }
});

更新2 - 我的PHP代码:

case "fetchCountries":
    $intval_itemIDs = array_map("intval", $_POST["itemIDs"]);
    $itemIDs = implode(",", $intval_itemIDs);
    $stmt = $conn->prepare("SELECT itemID, en FROM Countries WHERE itemID IN(" . $itemIDs . ") ORDER BY itemID");
    $stmt->execute();
    $result = $stmt->get_result();
    while($arrCountries = $result->fetch_assoc()){
        $countries[] = array("itemID" => $arrCountries["itemID"], "itemVal" => $arrCountries["en"]);
    }
    var_dump(json_encode($countries));
    break;

预期结果(用于测试):

console.log("中国");
console.log("法国");
console.log("德国");
// ...

有人能帮我解决这个问题吗?

非常感谢,

Tim

0
0 Comments

问题出现的原因是在使用jQuery迭代JSON编码字符串(数组)时,没有正确解析字符串或对象。解决方法是使用`JSON.parse()`方法将字符串解析为对象,然后使用`$.each()`方法迭代对象的属性。

具体的解决方法如下:

方法一:

var data=[{"itemID":1,"itemVal":"China"},{"itemID":2,"itemVal":"France"},{"itemID":3,"itemVal":"Germany"},{"itemID":4,"itemVal":"Italy"},{"itemID":5,"itemVal":"Poland"},{"itemID":6,"itemVal":"Russia"},{"itemID":7,"itemVal":"USA"}];
$.each(data,function(key,value){
    console.log(value.itemVal);
});

方法二:

var arr = JSON.parse(JSON.stringify(data));
$.each(arr, function (key, value) {
    console.log(value.itemVal);
});

其中`data`是一个JSON编码的字符串。

另外,在问题的更新中,还提供了其他解决方法。具体如下:

方法三:

$.getJSON( "your.php", function( data ) {
    console.log(data);
    $.each(data, function (key, value) {
        console.log(value.itemVal);
    });
});

方法四:

$.ajax({        
    type: "post",   
    url: "your.php",
    cache: "false",
    dataType: 'json',
    data: {
        node: 'fetchCountries',
        itemIDs: youval // a list of integers
    },
    success: function(data){
        console.log(data);
        var arr = JSON.parse(JSON.stringify(data));
        $.each($(arr),function(key,value){
            console.log(value.itemVal);
        });
    }
});

方法五:

$.ajax({        
    type: "post",   
    url: "your.php",
    cache: "false",
    dataType: 'json',
    data: {
        node: 'fetchCountries',
        itemIDs: youval // a list of integers
    },
    success: function(data){
        console.log(data);
        $.each($(data),function(key,value){
            console.log(value.itemVal);
        });
    }
});

感谢所有提供解决方法的人的帮助!

0
0 Comments

问题的原因是没有正确迭代JSON编码字符串(数组)。解决方法是使用jQuery的$.each()函数来迭代JSON对象。 下面是整理后的文章:

WhistleBlower, 我已经在我的浏览器上测试了你的代码,它是有效的。为什么你不使用header("Content-type :application/json");呢?这样,你就不需要解析JSON字符串了。

var data = '[{"itemID":1,"itemVal":"China"},{"itemID":2,"itemVal":"France"},{"itemID":3,"itemVal":"Germany"},{"itemID":4,"itemVal":"Italy"},{"itemID":5,"itemVal":"Poland"},{"itemID":6,"itemVal":"Russia"},{"itemID":7,"itemVal":"USA"}]';
var arr = JSON.parse(data);
$.each($(arr),function(key,value){
   console.log(value.itemVal);
});

非常感谢你的帮助!我做了更多的研究,这可能就是我需要的,因为到目前为止,所有其他方法都失败了。你能解释一下我在哪里以及如何应用它吗?我以前从未使用过这个。

请查看我的评论

你真的需要将JS变量arr作为jQuery对象吗?你可以尝试这样做:

$.each(arr, function(key,value){
    console.log(value.itemVal);
});
+

0
0 Comments

问题出现的原因是将JSON字符串解析为数组后,想要通过循环将每个元素推入一个新的数组(arr),但是出现了错误。错误信息在Chrome浏览器中显示为"Uncaught SyntaxError: Unexpected token A",在Firefox浏览器中显示为"SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data"。

解决方法是检查JSON字符串的格式是否正确,并确保解析后的数组中的元素是对象形式。为了解决这个问题,可以按照以下步骤进行操作:

1. 确保JSON字符串的格式正确,包括正确的引号、逗号和花括号的使用。在上面的例子中,JSON字符串的格式是正确的,但是在实际应用中可能会出现错误。

2. 确保解析后的数组是一个包含对象的数组。在上面的例子中,通过使用JSON.parse()函数将JSON字符串解析为数组,确保每个元素都是一个对象。

3. 使用forEach()函数来循环遍历数组中的每个对象,并对每个对象进行操作。在上面的例子中,使用forEach()函数遍历theArray数组,并输出每个对象的itemID和itemVal属性。

通过以上步骤,可以正确地遍历JSON编码的字符串数组,并将每个元素推入新的数组中。

0