programing

개체 및 어레이의 복잡한 JSON 중첩

yellowcard 2023. 3. 31. 21:59
반응형

개체 및 어레이의 복잡한 JSON 중첩

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 }
                 ] 
} 

다음 정보를 저장하는 개체 및 배열의 중첩 구조를 만들고 싶습니다.

{
"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":[{}]
}]}

하지만 어떻게 해야 할지 모르겠어요.JavaScript 객체만 만들면 되나요?JSON은 이 프로젝트에 의미가 있습니까?

이러한 설정을 위한 올바른 구문은 무엇입니까?

지금까지의 코드는 다음과 같습니다.

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

첫 번째 코드는 Javascript 코드의 예입니다.이것은 유사하지만 JSON은 아닙니다.JSON은 1) 코멘트를 가지고 있지 않습니다.var키워드

JSON에 코멘트가 없습니다만, 이 코멘트를 삭제해 주세요.var이렇게 시작합니다.

orders: {

[{}]표기법은 "배열 내의 객체"를 의미하며 모든 곳에서 필요한 것은 아닙니다.오류는 아니지만, 어떤 목적에서는 너무 복잡해요.AssociatedDrug는 오브젝트로 기능해야 합니다.

"associatedDrug": {
                "name":"asprin",
                "dose":"",
                "strength":"500 mg"
          }

또한, 빈 실험실은 무엇으로 채워져야 합니다.

그 외에는 당신의 코드는 OK입니다.javascript에 붙여넣거나JSON.parse()method 또는 기타 구문 분석 방법(eval은 사용하지 마십시오)

업데이트 2 응답:

obj.problems[0].Diabetes[0].medications[0].medicationsClasses[0].className[0].associatedDrug[0].name

를 지정하면 'syslog'가 반환됩니다.그러나 모든 곳의 앞치에는 더 적합하다.

나는 문제를 성공적으로 해결했다.코드는 다음과 같습니다.

복잡한 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"    
        }
    ]
}

데이터를 가져와 웹 페이지에 표시하는 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");

});

});

JSON의 언어 정의를 따르십시오.두 번째 예에서는 다음 섹션이 있습니다.

"labs":[{
    ""
}]

개체가 0개 이상의 키-값 쌍으로 구성되어야 하므로 잘못되었습니다."a" : "b",어디에"b"유효한 값일 수 있습니다.일부 파서는 자동으로 해석할 수 있습니다.{ "" }되려고{ "" : null }단, 이것은 명확하게 정의된 케이스는 아닙니다.

또한 개체의 중첩된 배열을 사용하고 있습니다. [{}]꽤 많이요.다음과 같은 경우에만 이 작업을 수행할 수 있습니다.

  1. 배열의 각 개체에 대한 올바른 "식별자" 문자열이 없습니다.
  2. 해당 엔트리의 키 값을 어레이로 하는 데에는 몇 가지 분명한 이유가 있습니다.

첫째, 데이터 구조(xml,json,yaml)를 선택하면 일반적으로 가독성/크기 문제만 포함됩니다.예를들면

Json은 매우 콤팩트하지만, 어떤 사람도 쉽게 읽을 수 없고, 매우 어렵게 디버깅을 할 수 없습니다.

XML은 매우 크지만 누구나 쉽게 읽고 디버깅할 수 있습니다.

Yaml은 Xml과 json 사이에 있습니다.

그러나 Javascript를 많이 사용하고 싶거나 소프트웨어가 브라우저와 서버 간에 데이터를 많이 전송한다면 Json을 사용해야 합니다. 왜냐하면 Json은 순수 Javascript이고 매우 작기 때문입니다.그러나 문자열로 쓰려고 하지 말고 라이브러리를 사용하여 개체에서 필요한 코드를 생성하십시오.

이게 도움이 됐으면 좋겠다.

이 함수를 사용하여 킹 배열의 중첩된 배열에 있는 개체를 찾을 수 있습니다.

function findTByKeyValue (element, target){
        var found = true;
        for(var key in target) { 
            if (!element.hasOwnProperty(key) || element[key] !== target[key])   { 
                found = false;
                break;
            }
        }
        if(found) {
            return element;
        }
        if(typeof(element) !== "object") { 
            return false;
        }
        for(var index in element) { 
            var result = findTByKeyValue(element[index],target);
            if(result) { 
                return result; 
            }
        } 
    };

findTByKeyValue(problems,{"name":"somethingElse","strength":"500 mg"}) =====> result equal to object associatedDrug#2

언급URL : https://stackoverflow.com/questions/10539797/complex-json-nesting-of-objects-and-arrays

반응형