jQuery / JavaScript로 JSON 데이터를 구문 분석하는 방법은 무엇입니까?


190

다음과 같이 JSON을 반환하는 AJAX 호출이 있습니다.

$(document).ready(function () {
    $.ajax({ 
        type: 'GET', 
        url: 'http://example/functions.php', 
        data: { get_param: 'value' }, 
        success: function (data) { 
            var names = data
            $('#cand').html(data);
        }
    });
});

#canddiv 안에 나는 얻을 것이다 :

[ { "id" : "1", "name" : "test1" },
  { "id" : "2", "name" : "test2" },
  { "id" : "3", "name" : "test3" },
  { "id" : "4", "name" : "test4" },
  { "id" : "5", "name" : "test5" } ]

이 데이터를 반복하고 각 이름을 div에 배치하려면 어떻게합니까?

답변:


282

서버 측 스크립트가 올바른 Content-Type: application/json응답 헤더를 설정하지 않았다고 가정하면 dataType: 'json'매개 변수 를 사용하여 jQuery에 이것이 JSON임을 표시해야합니다 .

그런 다음 $.each()함수를 사용 하여 데이터를 반복 할 수 있습니다 .

$.ajax({ 
    type: 'GET', 
    url: 'http://example/functions.php', 
    data: { get_param: 'value' }, 
    dataType: 'json',
    success: function (data) { 
        $.each(data, function(index, element) {
            $('body').append($('<div>', {
                text: element.name
            }));
        });
    }
});

또는 $.getJSON방법을 사용하십시오 :

$.getJSON('/functions.php', { get_param: 'value' }, function(data) {
    $.each(data, function(index, element) {
        $('body').append($('<div>', {
            text: element.name
        }));
    });
});

성공. 감사. json pr을 보내야합니까? 내 PHP 함수에서 아무것도 보낼 수 있습니까?
Patrioticcow

7
@Patrioticcow, JSON도 보낼 수 있습니다. 이 경우 함수 에서 contentType: 'application/json'설정 을 설정 $.ajax하고 JSON data은 다음과 같이 매개 변수를 직렬화해야합니다 data: JSON.stringify({ get_param: 'value' }). 그런 다음 PHP 스크립트에서 원래 객체를 다시 얻으려면 json 디코딩해야합니다.
Darin Dimitrov

이 "완료 : 기능"은 무엇입니까? "성공"과 동일합니까? 문서에서 볼 수 없습니다.
Buttle Butkus

내 json 데이터는 {"0":{"level1":"done","level2":"done","level3":"no"}}어떻게 각 변수로 이것을 추출 할 수 있습니까? 나는이 사용하는 것과 시도 $.each방법 만 정의되지 않은 var에 반환level1 = ele[0].level1;
151291

@DarinDimitrov 회전식 부트 스트랩에 이러한 데이터를 표시하는 방법은 무엇입니까?
nideba

79

설정 dataType:'json'하면 JSON이 구문 분석됩니다.

$.ajax({
  type: 'GET',
  url: 'http://example/functions.php',
  data: {get_param: 'value'},
  dataType: 'json',
  success: function (data) {
    var names = data
    $('#cand').html(data);
  }
});

또는 다음을 사용할 수 있습니다 parseJSON.

var parsedJson = $.parseJSON(jsonToBeParsed);

그런 다음 다음을 반복 할 수 있습니다.

var j ='[{"id":"1","name":"test1"},{"id":"2","name":"test2"},{"id":"3","name":"test3"},{"id":"4","name":"test4"},{"id":"5","name":"test5"}]';

...을 사용하여 $().each:

var json = $.parseJSON(j);
$(json).each(function (i, val) {
  $.each(val, function (k, v) {
    console.log(k + " : " + v);
  });
}); 

JSFiddle


내 json 데이터는 {"0":{"level1":"done","level2":"done","level3":"no"}}어떻게 각 변수로 이것을 추출 할 수 있습니까? 나는이 사용하는 것과 시도 $.each방법 만 정의되지 않은 var에 반환level1 = ele[0].level1;
151291

1
@ 151291 그것은 귀하의 질문을하는 적절한 방법이 아닙니다. 어쨌든 여기 json을위한 바이올린 jsfiddle.net/fyxZt/1738 이 있습니다. 배열 표기법 참고json[0]
Rafay

감사합니다. 유용한 답변. DB 테이블에서 지정된 열 값을 얻는 방법은 무엇입니까?
PHPFan

@PHPF 데이터베이스 테이블을 쿼리하는 방법을 의미합니까? 자세한 정보를 제공해 주시면 필요한 세부 정보가 포함 된 새로운 질문을하는 것이 좋습니다.
Rafay

예를 들어 이름 값만 가져 오려면이 질문에 @Rafay를 입력하십시오.
PHPFan

24

다음 코드를 시도하면 내 프로젝트에서 작동합니다.

//start ajax request
$.ajax({
    url: "data.json",
    //force to handle it as text
    dataType: "text",
    success: function(data) {

        //data downloaded so we call parseJSON function 
        //and pass downloaded data
        var json = $.parseJSON(data);
        //now json variable contains data in json format
        //let's display a few items
        for (var i=0;i<json.length;++i)
        {
            $('#results').append('<div class="name">'+json[i].name+'</>');
        }
    }
});

11
 $(document).ready(function () {
    $.ajax({ 
        type: 'GET', 
        url: '/functions.php', 
        data: { get_param: 'value' }, 
        success: function (data) { 
         for (var i=0;i<data.length;++i)
         {
         $('#cand').append('<div class="name">data[i].name</>');
         }
        }
    });
});

6

그 코드를 사용하십시오.

     $.ajax({

            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: "Your URL",
            data: "{}",
            dataType: "json",
            success: function (data) {
                alert(data);
            },
            error: function (result) {
                alert("Error");
            }
        });

5

좋아, 나는 같은 문제가 있었고 다음과 같이 제거 []하여 이것을 고쳤다 [{"key":"value"}].

  1. PHP 파일에서 다음과 같이 인쇄하는지 확인하십시오.
echo json_encode(array_shift($your_variable));
  1. 당신의 성공 함수에서 이것을하십시오
 success: function (data) {
    var result = $.parseJSON(data);
      ('.yourclass').append(result['your_key1']);
      ('.yourclass').append(result['your_key2']);
       ..
    }

또한 원하는 경우 반복 할 수 있습니다


5

위의 모든 솔루션에 동의하지만이 문제의 근본 원인을 지적하려면 위의 모든 코드에서 주요 역할을 수행하는 사람은 다음과 같습니다.

dataType:'json'

선택 사항 인이 행을 놓치면 서버에서 리턴 된 데이터는 전체 길이 문자열 (기본 리턴 유형)로 처리됩니다. 이 코드 줄을 추가하면 가능한 json 문자열을 json 객체로 변환하도록 jQuery에 알립니다.

json 데이터 객체가 필요한 경우 모든 jQuery ajax 호출에서이 행을 지정해야합니다.


3
var jsonP = "person" : [ { "id" : "1", "name" : "test1" },
  { "id" : "2", "name" : "test2" },
  { "id" : "3", "name" : "test3" },
  { "id" : "4", "name" : "test4" },
  { "id" : "5", "name" : "test5" } ];

var cand = document.getElementById("cand");
var json_arr = [];
$.each(jsonP.person,function(key,value){
    json_arr.push(key+' . '+value.name  + '<br>');
    cand.innerHTML = json_arr;
});

<div id="cand">
</div>

2

JSON 데이터

data = {"clo":[{"fin":"auto"},{"fin":"robot"},{"fin":"fail"}]}

검색 할 때

$.ajax({
  //type
  //url
  //data
  dataType:'json'
}).done(function( data ) {
var i = data.clo.length; while(i--){
$('#el').append('<p>'+data.clo[i].fin+'</>');
}
});

0
$.ajax({
  url: '//.xml',
  dataType: 'xml',
  success: onTrue,
  error: function (err) {
      console.error('Error: ', err);
  }
});

$('a').each(function () {
  $(this).click(function (e) {
      var l = e.target.text;
      //array.sort(sorteerOp(l));
      //functionToAdaptHtml();
  });
});
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.