jQuery:如何遍历JSON编码的字符串(数组)
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
问题出现的原因是在使用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); }); } });
感谢所有提供解决方法的人的帮助!
问题的原因是没有正确迭代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); }); +
问题出现的原因是将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编码的字符串数组,并将每个元素推入新的数组中。