在Jquery中迭代Json

在Jquery中迭代Json,jquery,json,autocomplete,Jquery,Json,Autocomplete,大家好,提前谢谢你们帮助我。首先,如果我在这里使用了错误的短语,请道歉。我不太担心这里的语法,只是让它工作。现在,问题是:我让django序列化程序输出以下JSON: [ { "pk": 11262, "model": "dict.words", "fields": { "lang": "KO", "incorrect": null, "sug_translat

大家好,提前谢谢你们帮助我。首先,如果我在这里使用了错误的短语,请道歉。我不太担心这里的语法,只是让它工作。现在,问题是:我让django序列化程序输出以下JSON:

[
    {
        "pk": 11262, 
        "model": "dict.words", 
        "fields": {
            "lang": "KO", 
            "incorrect": null, 
            "sug_translation": [
                3215
            ], 
            "word": "\uc0dd\uac01\ud558\ub2e4", 
            "definition": [], 
            "pos": "VE", 
            "phrase": [], 
            "translation": [
                {
                    "pk": 1, 
                    "model": "dict.words", 
                    "fields": {
                        "word": "comprender"
                    }
                }, 
                {
                    "pk": 6028, 
                    "model": "dict.words", 
                    "fields": {
                        "word": "entender"
                    }
                }
            ], 
            "incomplete": null
        }
    }
]
我想做的是访问fields.translation.fields.words,因此自动完成的Jquery是

$(function() {

             $( "#query_form" ).autocomplete({
                     minLength: 2,
                     source: 'http://127.0.0.1:8000/json_results/',
                     focus: function( event, ui ) {
                             $( "#query_form" ).val( ui.item.word );
                             return false;
                     },
             select: function( event, ui ) {
                     $.get ('http://127.0.0.1:8000/json_detail/',
                                {
                                 item: ui.item.pk
                                },
                                function(data) {
                                 $('#query_result').prepend(data);
                                });
                     $( "#query_form" ).val( ui.item.word );
                     return false;
             }
     })
     .data( "autocomplete" )._renderItem = function( ul, item ) {
                        var tran = $.each(item.fields.translation, function(i){item.fields.translation[i].fields.word})
                return $( "<li></li>" )
                        .data( "item.autocomplete", item )
                        .append("<a>" + item.fields.word + tran + "</a>")
                        .appendTo( ul );
     };
});
$(函数(){
$(“#查询表格”)。自动完成({
最小长度:2,
资料来源:'http://127.0.0.1:8000/json_results/',
焦点:功能(事件、用户界面){
$(“#查询表格”).val(ui.item.word);
返回false;
},
选择:功能(事件、用户界面){
$.get('http://127.0.0.1:8000/json_detail/',
{
项目:ui.item.pk
},
功能(数据){
$(“#查询结果”)。前置(数据);
});
$(“#查询表格”).val(ui.item.word);
返回false;
}
})
.数据(“自动完成”)。\u renderItem=功能(ul,项目){
var tran=$.each(item.fields.translation,函数(i){item.fields.translation[i].fields.word})
返回$(“
  • ”) .data(“item.autocomplete”,item) .append(“+item.fields.word+tran+”) .附录(ul); }; });
    我对jquery和javascript完全不了解,所以请原谅任何明显的格式错误。无论如何,这里的问题是,虽然这确实发出了请求,但是自动完成函数,$.each(item.fields.translation,function(i)item.fields.translation[i].fields.word})在自动完成列表中返回[object,object]。如果通过alert()将其输出,它将返回正确的值。如果我只在.append行中使用item.fields.translation[0].fields.word,它将输出值。但出于某种原因,当我要求它做我想让它做的事情时,我得到了[object]
    有人知道我做错了什么吗?提前谢谢你

    您正在将变量
    tran
    设置为等于
    $。这就是为什么它最终成为一个对象

    我不清楚你到底想干什么。您在
    item.fields.translation
    数组中的项目上循环,但最终执行一个追加,就好像这个循环应该只返回一个字符串一样。但是
    item.fields.translation
    的数组中有两个项,所以。。。您可以构建如下阵列:

    var tran = [];
    $.each(item.fields.translation, function(i){
        tran.push(item.fields.translation[i].fields.word);
    });
    //tran now equals ['comprender','entender']
    
    不确定这是否有帮助。如果你能澄清一下你对
    tran
    的期望,那么我可以进一步提供帮助

    还有一个旁注:您可以将当前迭代中项的值传递给
    $中的函数,而不仅仅是它的索引/键。例如:

    $.each(item.fields.translation, function(i,v){
        //the following is the same as tran.push(item.fields.translation[i].fields.word);
        tran.push(v.fields.word);
    });
    

    您正在将变量
    tran
    设置为等于
    $。这就是为什么它最终成为一个对象

    我不清楚你到底想干什么。您在
    item.fields.translation
    数组中的项目上循环,但最终执行一个追加,就好像这个循环应该只返回一个字符串一样。但是
    item.fields.translation
    的数组中有两个项,所以。。。您可以构建如下阵列:

    var tran = [];
    $.each(item.fields.translation, function(i){
        tran.push(item.fields.translation[i].fields.word);
    });
    //tran now equals ['comprender','entender']
    
    不确定这是否有帮助。如果你能澄清一下你对
    tran
    的期望,那么我可以进一步提供帮助

    还有一个旁注:您可以将当前迭代中项的值传递给
    $中的函数,而不仅仅是它的索引/键。例如:

    $.each(item.fields.translation, function(i,v){
        //the following is the same as tran.push(item.fields.translation[i].fields.word);
        tran.push(v.fields.word);
    });
    

    第一个例子正是我想要的。我不知道推送(就像我说的,完全没有js),所以你,我的朋友,是我的新英雄。谢谢,谢谢!!直接工作:第一个例子正是我想要的。我不知道推送(就像我说的,完全没有js),所以你,我的朋友,是我的新英雄。谢谢,谢谢!!一下子就成功了:D