programing

Javascript JSON 어레이 해석 방법

css3 2023. 3. 1. 11:25

Javascript JSON 어레이 해석 방법

서버에서 JSON 메시지를 받기 위해 Sencha Touch(ExtJS)를 사용하고 있습니다.제가 받은 메시지는 다음과 같습니다.

{
"success": true,
"counters": [
    {
        "counter_name": "dsd",
        "counter_type": "sds",
        "counter_unit": "sds"
    },
    {
        "counter_name": "gdg",
        "counter_type": "dfd",
        "counter_unit": "ds"
    },
    {
        "counter_name": "sdsData",
        "counter_type": "sds",
        "counter_unit": "   dd       "
    },
    {
        "counter_name": "Stoc final",
        "counter_type": "number    ",
        "counter_unit": "litri     "
    },
    {
        "counter_name": "Consum GPL",
        "counter_type": "number    ",
        "counter_unit": "litri     "
    },
    {
        "counter_name": "sdg",
        "counter_type": "dfg",
        "counter_unit": "gfgd"
    },
    {
        "counter_name": "dfgd",
        "counter_type": "fgf",
        "counter_unit": "liggtggggri     "
    },
    {
        "counter_name": "fgd",
        "counter_type": "dfg",
        "counter_unit": "kwfgf       "
    },
    {
        "counter_name": "dfg",
        "counter_type": "dfg",
        "counter_unit": "dg"
    },
    {
        "counter_name": "gd",
        "counter_type": "dfg",
        "counter_unit": "dfg"
    }

    ]
}

문제는 이 JSON 오브젝트를 해석할 수 없기 때문에 각 카운터 오브젝트를 사용할 수 없다는 것입니다.

나는 그것을 다음과 같이 설명하려고 한다.

var jsonData = Ext.util.JSON.decode(myMessage);
for (var counter in jsonData.counters) {
     console.log(counter.counter_name);
 }

내가 뭘 잘못하고 있지?감사해요!

Javascript에는 문자열에 대한 JSON 파스가 내장되어 있습니다.이것이 당신이 가지고 있는 것이라고 생각합니다.

var myObject = JSON.parse("my json string");

예를 들어 다음과 같이 사용할 수 있습니다.

var jsonData = JSON.parse(myMessage);
for (var i = 0; i < jsonData.counters.length; i++) {
    var counter = jsonData.counters[i];
    console.log(counter.counter_name);
}

다음은 작업 예시입니다.

편집: for loop 사용에 오류가 있습니다(첫 번째 읽었을 때 놓쳤습니다.스팟은 @Evert로 인정됩니다).for-in 루프를 사용하면 var가 실제 데이터가 아닌 현재 루프의 속성 이름으로 설정됩니다.올바른 사용법에 대해서는 위의 업데이트된 루프를 참조하십시오.

중요:JSON.parse오래된 브라우저에서는 이 방법이 동작하지 않습니다.따라서 웹 사이트를 인터넷 접속을 통해 사용할 수 있도록 하는 것은 문제가 될 수 있습니다.정말로 관심이 있는 경우는, 다음의 서포트 차트를 참조해 주세요(모든 박스에 체크 마크를 붙입니다).

for-in-loop에서는 실행 변수가 속성 값이 아닌 속성 이름을 유지합니다.

for (var counter in jsonData.counters) {
    console.log(jsonData.counters[counter].counter_name);
}

단, 카운터는 어레이이므로 일반 for-loop을 사용해야 합니다.

for (var i=0; i<jsonData.counters.length; i++) {
    var counter = jsonData.counters[i];
    console.log(counter.counter_name);
}

제 대답은 이렇습니다.

<!DOCTYPE html>
<html>
   <body>
      <h2>Create Object from JSON String</h2>
      <p>
         First Name: <span id="fname"></span><br> 
         Last Name: <span id="lname"></span><br> 
      </p>
      <script>
         var txt =
           '{"employees":[' +
           '{"firstName":"John","lastName":"Doe" },' +
           '{"firstName":"Anna","lastName":"Smith" },' +
           '{"firstName":"Peter","lastName":"Jones" }]}';
         
         //var jsonData = eval ("(" + txt + ")");
         var jsonData = JSON.parse(txt);
         for (var i = 0; i < jsonData.employees.length; i++) {
             var counter = jsonData.employees[i];
             //console.log(counter.counter_name);
             alert(counter.firstName);
         }
      </script>
   </body>
</html>

더 중요한 건..

var jsontext = '{"firstname":"Jesper","surname":"Aaberg","phone":["555-0100","555-0120"]}';  
var contact = JSON.parse(jsontext);  
document.write(contact.surname + ", " + contact.firstname);  
document.write(contact.phone[1]);  
// Output:  
// Aaberg, Jesper  
// 555-0100

참고 자료: https://learn.microsoft.com/en-us/scripting/javascript/reference/json-parse-function-javascript

서버 데이터와 상호 작용하기 위한 "Sencha way"란Ext.data.Store에 의해 대리되는Ext.data.proxy.Proxy(이 경우)Ext.data.proxy.Ajax)가 탑재되어 있습니다.Ext.data.reader.Json(JSON 인코딩 데이터의 경우 다른 리더도 사용할 수 있습니다).서버에 데이터를 다시 쓰기 위해Ext.data.writer.Writer몇 가지 종류가 있습니다.

이러한 설정의 예를 다음에 나타냅니다.

    var store = Ext.create('Ext.data.Store', {
        fields: [
            'counter_name',
            'counter_type',
            'counter_unit'
        ],

        proxy: {
            type: 'ajax',
            url: 'data1.json',

            reader: {
                type: 'json',
                idProperty: 'counter_name',
                rootProperty: 'counters'
            }
        }
    });

data1.json이 예에서는 ( 바이올린에서도 사용할 수 있습니다)에 데이터의 글자 그대로가 포함되어 있습니다. idProperty: 'counter_name'이 경우 아마 옵션이지만 보통 프라이머리 키 속성을 가리킵니다. rootProperty: 'counters'는 데이터 항목의 배열을 포함하는 속성을 지정합니다.

스토어 셋업에서는, 콜을 실시해 서버로부터 데이터를 재읽을 수 있습니다.store.load()또한 그리드, 목록, 양식 등 Sencha Touch에 적합한 UI 컴포넌트에 스토어를 연결할 수도 있습니다.

그냥 경고만 하면...

var data = JSON.parse(responseBody);

는 폐지되었습니다.

우체국 학습 센터에서 제안합니다.

var jsonData = pm.response.json();

이거 참 잘 먹히네!

그래서 나는 내 요구에 따라 코드를 편집했다.변경사항은 다음과 같습니다.응답 ID 번호를 환경변수에 저장합니다.

var jsonData = JSON.parse(responseBody);
for (var i = 0; i < jsonData.data.length; i++)
{
    var counter = jsonData.data[i];
    postman.setEnvironmentVariable("schID", counter.id);
}

투표율이 높은 답은 틀렸습니다.그것을 사용했을 때, 나는 그것을 3행에서 발견한다:

var counter = jsonData.counters[i];

다음과 같이 변경했습니다.

var counter = jsonData[i].counters;

나한테는 효과가 있었어요3행의 다른 답변과는 차이가 있습니다.

var jsonData = JSON.parse(myMessage);
for (var i = 0; i < jsonData.counters.length; i++) {
    var counter = jsonData[i].counters;
    console.log(counter.counter_name);
}

ExtJs에서 데이터스토어 및 프록시를 사용해야 합니다.여기에는 많은 가 있으며 JSON 리더는 JSON 메시지를 지정한 모델로 자동 해석합니다.

ExtJs를 사용할 때는 기본적인 Javascript를 사용할 필요가 없습니다.모든 것이 다르기 때문에 모든 것을 올바르게 하기 위해서는 ExtJs 방법을 사용해야 합니다.그 문서를 주의 깊게 읽어보세요.좋습니다.

덧붙여서, 이러한 예는 ExtJs와 같은 코어 기능에 근거하고 있는 Sencha Touch(특히 v2)에도 대응하고 있습니다.

데이터가 정확히 일치하는지는 모르겠지만 페이지를 사용할 때 jQuery FormBuilder에서 내보낸 JSON 개체의 배열이 있었습니다.

제 답변이 저와 비슷한 문제에 대한 답을 찾는 모든 사람에게 도움이 되기를 바랍니다.

데이터는 다음과 같습니다.

var allData = 
[
    [
        {
            "type":"text",
            "label":"Text Field"
        }, 
        {
            "type":"text",
            "label":"Text Field"
        }
    ],
    [
        {
            "type":"text",
            "label":"Text Field"
        }, 
        {
            "type":"text",
            "label":"Text Field"
        }
    ]
]

이것을 해석하기 위해서, 간단하게 다음의 조작을 실시했습니다.

JSON.parse("["+allData.toString()+"]")

언급URL : https://stackoverflow.com/questions/9991805/javascript-how-to-parse-json-array