首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正确解析json

正确解析json
EN

Stack Overflow用户
提问于 2013-06-14 22:17:43
回答 3查看 71关注 0票数 0

我有这个json文件:

代码语言:javascript
复制
{
"categories": [
    {
        "producerName": "Canon",
        "productName": [
            {
                "kamera": "EOS 5D",
                "link": "/unterwassergehaeuse-fuer/canon-eos-5d/",
                "kamera": "EOS 5D Mark II",
                "link": "/unterwassergehaeuse-fuer/canon-eos-5d/",
                "kamera": "EOS 5D Mark III",
                "link": "/unterwassergehaeuse-fuer/canon-eos-5d/",
                "productObj": [
                    {
                        "objektiv": "Canon EF 15mm f/2.8 Fisheye",
                        "link": "/uw-ports-fuer/vollformat/canon-ef-8-15mm-f-4l-fisheye-usm/"
                    },
                    {
                        "objektiv": "Canon EF 8-15mm f/4L Fisheye USM",
                        "link": "/uw-ports-fuer/vollformat/canon-ef-8-15mm-f-4l-fisheye-usm/"
                    },
                    {
                        "objektiv": "Canon EF 14mm f/2.8L USM",
                        "link": "/uw-ports-fuer/vollformat/canon-ef-8-15mm-f-4l-fisheye-usm/"
                    },
                    {
                        "objektiv": "Canon 24mm f/1.4 L USM",
                        "link": "/uw-ports-fuer/vollformat/canon-ef-8-15mm-f-4l-fisheye-usm/"
                    }
                ]
            },
            {
                "kamera": "EOS 7D",
                "link": "/uw-ports-fuer/vollformat/canon-ef-8-15mm-f-4l-fisheye-usm/",
                "productObj": [
                    {
                        "objektiv": "Canon EF 15mm f/2.8 Fisheye",
                        "link": "/uw-ports-fuer/vollformat/canon-ef-8-15mm-f-4l-fisheye-usm/"
                    },
                    {
                        "objektiv": "Canon EF 8-15mm f/4L Fisheye USM",
                        "link": "/uw-ports-fuer/vollformat/canon-ef-8-15mm-f-4l-fisheye-usm/"
                    },
                    {
                        "objektiv": "Canon EF 14mm f/2.8L USM",
                        "link": "/uw-ports-fuer/vollformat/canon-ef-8-15mm-f-4l-fisheye-usm/"
                    },
                    {
                        "objektiv": "Canon 24mm f/1.4 L USM",
                        "link": "/uw-ports-fuer/vollformat/canon-ef-8-15mm-f-4l-fisheye-usm/"
                    }
                ]
            }
        ]
    },
    {
        "producerName": "Nikon",
        "productName": [
            {
                "kamera": "D800",
                "link": "/uw-ports-fuer/vollformat/canon-ef-8-15mm-f-4l-fisheye-usm/",
                "productObj": [
                    {
                        "objektiv": "Canon EF 15mm f/2.8 Fisheye",
                        "link": "/uw-ports-fuer/vollformat/canon-ef-8-15mm-f-4l-fisheye-usm/"
                    }
                ]
            }
        ]
    },
    {
        "producerName": "Olympus",
        "productName": [
            {
                "kamera": "OM-D EM-5",
                "link": "/uw-ports-fuer/vollformat/canon-ef-8-15mm-f-4l-fisheye-usm/",
                "productObj": [
                    {
                        "objektiv": "Canon EF 15mm f/2.8 Fisheye",
                        "link": "/uw-ports-fuer/vollformat/canon-ef-8-15mm-f-4l-fisheye-usm/"
                    }
                ]
            }
        ]
    }
]

}

我使用json回调通过jQuery解析它,它工作得很好。

唯一的问题是,我想让所有的"kamera“与"link”连接到"productObj“,但我总是只得到最后一个字符串。

希望你能帮助我。

jQuery部分:

代码语言:javascript
复制
$('#model').on("change", function() {
    var indx = $("#cat").find(".selectBox-label").attr("id");
    //console.log(indx);
    var item = '<option id="std">2. Kamera auswählen:</option>';
    for (n=0; n < menu[indx].productName.length; n++){
        item += '<option id="'+[n]+'">' + menu[indx].productName[n].kamera + '</option>';
    }
    $('#camera').html(item);
    $('#camera').selectBox('refresh');
    $('#camera').selectBox('enable');
    $.cookie('m', menu[indx].producerName);
    $.removeCookie('k');
    $.removeCookie('o');


    //second onChange
    $('#camera').on("change", function() {

        var indy = $("#items").find(".selectBox-label").attr("id");
        var goRef = menu[indx].productName[indy].link;

        if(goRef) {

            $.cookie('k', menu[indx].productName[indy].kamera);
            if($(".leftfinder").length > 0) {
                $(".gofind").css({'background': 'url(leftgofind.png)', 'cursor':'pointer'});
            }else {
                $(".gofind").css({'background': 'url(gofindbt.png)', 'cursor':'pointer'});
            }

            $(".gofind").on("click", function() {
                window.location.href = "url"+goRef;
            });
        }
});
EN

回答 3

Stack Overflow用户

发布于 2013-06-14 22:47:49

使用此代码,您的属性将被覆盖:

代码语言:javascript
复制
var obj = { "kamera": "EOS 5D",
    "link": "/unterwassergehaeuse-fuer/canon-eos-5d/",
    "kamera": "EOS 5D Mark II",
    "link": "/unterwassergehaeuse-fuer/canon-eos-5d/",
    "kamera": "EOS 5D Mark III",
    "link": "/unterwassergehaeuse-fuer/canon-eos-5d/"
}

等同于:

代码语言:javascript
复制
var obj =   {  "kamera": "EOS 5D Mark III",
    "link": "/unterwassergehaeuse-fuer/canon-eos-5d/"}

这就是为什么你只得到最后一个字符串的原因。不能定义具有多个同名属性的对象

票数 0
EN

Stack Overflow用户

发布于 2013-06-14 23:05:57

而不是这个结构:

代码语言:javascript
复制
 { 
   "kamera": "EOS 5D",
   "link": "/unterwassergehaeuse-fuer/canon-eos-5d/",
   "kamera": "EOS 5D Mark II",
   "link": "/unterwassergehaeuse-fuer/canon-eos-5d/",
   "kamera": "EOS 5D Mark III",
   "link": "/unterwassergehaeuse-fuer/canon-eos-5d/"
 }

为什么不拥有:

代码语言:javascript
复制
[
   {
      "kamera": "EOS 5D",
      "link": "/unterwassergehaeuse-fuer/canon-eos-5d/"
   },
   {
      "kamera": "EOS 5D Mark II",
      "link": "/unterwassergehaeuse-fuer/canon-eos-5d/"
   },
   {
      "kamera": "EOS 5D Mark III",
      "link": "/unterwassergehaeuse-fuer/canon-eos-5d/"
   }
]

即一个对象数组。然后你就可以迭代它了。

票数 0
EN

Stack Overflow用户

发布于 2013-06-14 23:06:58

这不是一个好的JSON结构,您会覆盖您的值,因为您使用了相同的键

不管怎样,下面是如何解析的:

代码语言:javascript
复制
$.each(json.categories, function(key, val) {
    $.each(val.productName, function(key, val) {
        console.log("kamera: " + val.kamera + " | link:" + val.link);
    });
});

jsFiddle code

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17110623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档