对象和数组的复杂JSON嵌套

Ale*_*lex 32 javascript arrays jquery json object

我对JSON对象/数组的语法和结构很困难.

{ 
  "accounting" : [   
                     { "firstName" : "John",  
                       "lastName"  : "Doe",
                       "age"       : 23 },

                     { "firstName" : "Mary",  
                       "lastName"  : "Smith",
                        "age"      : 32 }
                 ],                            
  "sales"      : [ 
                     { "firstName" : "Sally", 
                       "lastName"  : "Green",
                        "age"      : 27 },

                     { "firstName" : "Jim",   
                       "lastName"  : "Galley",
                       "age"       : 41 }
                 ] 
} 
Run Code Online (Sandbox Code Playgroud)

我想创建一个嵌套的对象和数组结构,它将包含以下信息:

{
"problems": [{
    "Diabetes":[{
        "medications":[{
            "medicationsClasses":[{
                "className":[{
                    "associatedDrug":[{
                        "name":"asprin",
                        "dose":"",
                        "strength":"500 mg"
                    }],
                    "associatedDrug#2":[{
                        "name":"somethingElse",
                        "dose":"",
                        "strength":"500 mg"
                    }]
                }],
                "className2":[{
                    "associatedDrug":[{
                        "name":"asprin",
                        "dose":"",
                        "strength":"500 mg"
                    }],
                    "associatedDrug#2":[{
                        "name":"somethingElse",
                        "dose":"",
                        "strength":"500 mg"
                    }]
                }]
            }]
        }],
        "labs":[{
            "missing_field": "missing_value"
        }]
    }],
    "Asthma":[{}]
}]}
Run Code Online (Sandbox Code Playgroud)

但我不知道这样做的正确方法是什么.我应该只是制作JavaScript对象吗?JSON对这个项目有意义吗?

设置这样的东西的正确语法是什么?

到目前为止,这是我的代码:

$(document).ready(function() {
    $.getJSON('js/orders.json', function(json) {
      $.each(json.problems, function(index, order) {
        $('.loadMeds').append('<p>' + order.name + '</p>')
      });
    });
});
Run Code Online (Sandbox Code Playgroud)

Cor*_*ewe 22

第一个代码是Javascript代码的示例,它类似,但不是JSON.JSON不会有1)评论和2)var关键字

您的JSON中没有任何注释,但是您应该删除var并以这样开头:

orders: {
Run Code Online (Sandbox Code Playgroud)

[{}]符号的意思是"在一个数组对象",而不是你所需要的任何地方.这不是错误,但对于某些目的而言太复杂了.AssociatedDrug应该作为一个对象很好地工作:

"associatedDrug": {
                "name":"asprin",
                "dose":"",
                "strength":"500 mg"
          }
Run Code Online (Sandbox Code Playgroud)

此外,空对象实验室应该填充一些东西.

除此之外,你的代码还可以.您可以将其粘贴到javascript中,也可以使用该JSON.parse()方法或任何其他解析方法(请不要使用eval)

更新2回答:

obj.problems[0].Diabetes[0].medications[0].medicationsClasses[0].className[0].associatedDrug[0].name
Run Code Online (Sandbox Code Playgroud)

返回'阿司匹林'.然而,它更适合各地的森林

  • @Alex - 一旦你发现`JSON.parse()`在IE7中不起作用,jQuery中有一个方法可以在所有浏览器中执行它.`$ .parseJSON()` (4认同)

Ale*_*lex 15

我成功解决了我的问题.这是我的代码:

复杂的JSON对象:

   {
    "medications":[{
            "aceInhibitors":[{
                "name":"lisinopril",
                "strength":"10 mg Tab",
                "dose":"1 tab",
                "route":"PO",
                "sig":"daily",
                "pillCount":"#90",
                "refills":"Refill 3"
            }],
            "antianginal":[{
                "name":"nitroglycerin",
                "strength":"0.4 mg Sublingual Tab",
                "dose":"1 tab",
                "route":"SL",
                "sig":"q15min PRN",
                "pillCount":"#30",
                "refills":"Refill 1"
            }],
            "anticoagulants":[{
                "name":"warfarin sodium",
                "strength":"3 mg Tab",
                "dose":"1 tab",
                "route":"PO",
                "sig":"daily",
                "pillCount":"#90",
                "refills":"Refill 3"
            }],
            "betaBlocker":[{
                "name":"metoprolol tartrate",
                "strength":"25 mg Tab",
                "dose":"1 tab",
                "route":"PO",
                "sig":"daily",
                "pillCount":"#90",
                "refills":"Refill 3"
            }],
            "diuretic":[{
                "name":"furosemide",
                "strength":"40 mg Tab",
                "dose":"1 tab",
                "route":"PO",
                "sig":"daily",
                "pillCount":"#90",
                "refills":"Refill 3"
            }],
            "mineral":[{
                "name":"potassium chloride ER",
                "strength":"10 mEq Tab",
                "dose":"1 tab",
                "route":"PO",
                "sig":"daily",
                "pillCount":"#90",
                "refills":"Refill 3"
            }]
        }
    ],
    "labs":[{
        "name":"Arterial Blood Gas",
        "time":"Today",
        "location":"Main Hospital Lab"      
        },
        {
        "name":"BMP",
        "time":"Today",
        "location":"Primary Care Clinic"    
        },
        {
        "name":"BNP",
        "time":"3 Weeks",
        "location":"Primary Care Clinic"    
        },
        {
        "name":"BUN",
        "time":"1 Year",
        "location":"Primary Care Clinic"    
        },
        {
        "name":"Cardiac Enzymes",
        "time":"Today",
        "location":"Primary Care Clinic"    
        },
        {
        "name":"CBC",
        "time":"1 Year",
        "location":"Primary Care Clinic"    
        },
        {
        "name":"Creatinine",
        "time":"1 Year",
        "location":"Main Hospital Lab"  
        },
        {
        "name":"Electrolyte Panel",
        "time":"1 Year",
        "location":"Primary Care Clinic"    
        },
        {
        "name":"Glucose",
        "time":"1 Year",
        "location":"Main Hospital Lab"  
        },
        {
        "name":"PT/INR",
        "time":"3 Weeks",
        "location":"Primary Care Clinic"    
        },
        {
        "name":"PTT",
        "time":"3 Weeks",
        "location":"Coumadin Clinic"    
        },
        {
        "name":"TSH",
        "time":"1 Year",
        "location":"Primary Care Clinic"    
        }
    ],
    "imaging":[{
        "name":"Chest X-Ray",
        "time":"Today",
        "location":"Main Hospital Radiology"    
        },
        {
        "name":"Chest X-Ray",
        "time":"Today",
        "location":"Main Hospital Radiology"    
        },
        {
        "name":"Chest X-Ray",
        "time":"Today",
        "location":"Main Hospital Radiology"    
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

用于获取数据并在我的网页上显示的jQuery代码:

$(document).ready(function() {
var items = [];

$.getJSON('labOrders.json', function(json) {
  $.each(json.medications, function(index, orders) {
    $.each(this, function() {
        $.each(this, function() {
            items.push('<div class="row">'+this.name+"\t"+this.strength+"\t"+this.dose+"\t"+this.route+"\t"+this.sig+"\t"+this.pillCount+"\t"+this.refills+'</div>'+"\n");
        });
    });
  });

  $('<div>', {
    "class":'loaded',
    html:items.join('')
  }).appendTo("body");

});
Run Code Online (Sandbox Code Playgroud)

});

  • 对我来说,或许有点迟了; 但令我感到震惊的是你仍然使用数组*很多*,即使看起来只有一个对象真的存在.例如,您的顶级`medications`属性是单个对象的数组.除非你真的需要考虑药物类型的多个*集合*,否则我会完全删除数组.然后你可以使用`var x = medications.aceInhibitors`而不是`medications [0] .aceInhibitors`.(对我来说,第二个说"我正在使用*第一个*药物对象的aceInhibitors属性" - 这里的第一个含义是什么?) (11认同)