【问题标题】:Return specific object from JSON string?从 JSON 字符串返回特定对象?
【发布时间】:2012-06-23 21:22:29
【问题描述】:

我在 ASP.NET 页面上使用 JQuery 创建脚本。有一个如下所示的 JSON 字符串:

<input id="hfImages" type="hidden" value="[
{"ProductID": "000001",
 "Small": "http://myimages.com/images/I/75.jpg",
 "Medium": "http://myimages.com/images/I/160.jpg",
 "Large": "http://myimages.com/images/I/320.jpg",
 "Thumb": "http://myimages.com/images/I/30.jpg"},

{"ProductID": "000002",
 "Small": "http://myimages.com/images/I/75ab.jpg",
 "Medium": "http://myimages.com/images/I/160j.jpg",
 "Large": "http://myimages.com/images/I/320y.jpg",
 "Thumb": "http://myimages.com/images/I/30ii.jpg"},

{"ProductID": "000003",
 "Small": "http://myimages.com/images/I/75.jpg",
 "Medium": "http://myimages.com/images/I/160.jpg",
 "Large": "http://myimages.com/images/I/320.jpg",
 "Thumb": "http://myimages.com/images/I/30.jpg"}
]"/>

我从这个字符串创建一个对象:

var images = $.parseJSON($("#[id*='hfImages']").val());

有一个名为ProductID 的变量,其中包含我需要从这个 JSON 字符串中获取的“ProductID”的值,但我不知道该怎么做。最终(一旦我从这个字符串中检索到正确的数据),我希望能够做这样的事情:

$("#productImages img.small").src(image[0].Small)
$("#productImages img.medium").src(image[0].Medium)
$("#productImages img.large").src(image[0].Large)
$("#productImages img.thumb").src(image[0].Thumb)

我已经看到循环遍历 JSON 对象直到找到所需“密钥”的示例,但我认为使用 .filter.map 可以更简单地执行此操作?

我对 Javascript/JQuery 和 JSON 非常陌生。 似乎我有一个名为“ProductID”的,但我正在阅读的所有内容都不是指一个键。好像,名称/值中的每个名称都被视为一个键。

我很难找到一个很好的例子来说明如何做到这一点,这可能与我不知道这里所涉及的所有内容的正确术语有关。

鉴于所需的 ProductID 以字符串形式存储在 var ProductId 中,有人可以在 JQuery 中向我展示如何从上述 JSON 中获取对象的示例吗? (var ProductID = "000002";)

我也很感激任何指向 JSON 和 JQuery 的良好参考的链接。我去过 json.org 和其他几个网站,但就我的知识水平而言,它们并不是很有帮助。 :S

【问题讨论】:

  • 不要忘记在 html 属性中对 JSON 进行转义

标签: jquery json


【解决方案1】:

如果您想找到具有给定产品 ID 的相应元素,您可以使用 .grep() 函数。

像这样:

var productID = '000002';
var images = $.parseJSON($("#[id*='hfImages']").val());
var filteredImages = $.grep(images, function() {
    return this.ProductID == productID;
});

if (filteredImages.length > 0) {
    // at least one element inside the images array matched the filter criteria
    var product = filteredImages[0];

    // you could use product.Small, product.Medium, ... here
}

【讨论】:

  • 但是,我不想按索引引用数组。我需要返回“ProductID”= ProductID 的元素。没有一种方法可以从属性等于特定值的对象数组中返回一个对象吗?也许我没有清楚地表达我的问题。对不起。
  • 这是我需要做的。 .filter 或 .map 不做 .grep 之类的事情吗?我问是因为我的脚本的另一部分使用 .filter 和 .map 来查找与多个条件匹配的特定元素。我真的不明白它是如何工作的。
  • @rwkiii - 很像$.filter(),只是它需要一个数组(或对象?)并允许您逐步遍历它,check 它是不同的属性和属性或与之相反的任何东西您正在寻找,仅返回一个新数组,内部检查返回 true。这就像您将数组或对象缩减为仅匹配的部分,但您最终会得到一个副本,而不是更改/截断相同的数组。
  • 达林,它似乎不起作用。我已经检查了很多次我的代码,就像你在上面写的一样。我可以看到var images 确实包含 9 个元素,并且它还包含一个 ProductID 与 productID 匹配的元素。但是,在 $.grep 完成后,filteredImages 的长度始终为 0。
  • 我想我明白为什么这不起作用,但不知道如何解决它。 this 指的是我的 Window 而不是 images var。它不包含 .ProductID 属性。有谁知道如何解决这个问题或我可能做错了什么?我使用了 Darin 提供的代码。
猜你喜欢
  • 1970-01-01
  • 2018-02-25
  • 1970-01-01
  • 1970-01-01
  • 2020-01-07
  • 2012-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多