JSON + Javascript/JQuery. Как импортировать данные из json файла и анализировать его?

Если у меня есть файл JSON с именем names.json с:

{"employees":[
    {"firstName":"Anna","lastName":"Meyers"},
    {"firstName":"Betty","lastName":"Layers"},
    {"firstName":"Carl","lastName":"Louis"},
]}

Как я могу использовать его содержимое в javascript?

Ответы

Ответ 1

Пример, как это сделать:

<html>
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<script type="text/javascript">
    $(function(){
        $.getJSON('names.json',function(data){
            console.log('success');
            $.each(data.employees,function(i,emp){
                $('ul').append('<li>'+emp.firstName+' '+emp.lastName+'</li>');
            });
        }).error(function(){
            console.log('error');
        });
    });
</script>
</head>
<body>
    <ul></ul>
</body>
</html>

Ответ 2

Ваш JSON файл не содержит допустимого JSON. Вместо этого попробуйте следующее.

 {
     "employees": 
     [
         {
             "firstName": "Anna",
             "lastName": "Meyers"
         },
         {
             "firstName": "Betty",
             "lastName": "Layers"
         },
         {
             "firstName": "Carl",
             "lastName": "Louis"
         }
     ]
 }

Затем вы должны увидеть ответ. Проверьте http://jsonlint.com/

Ответ 3

В коде jQuery вы должны иметь свойство employees.

data.employees[0].firstName

Итак, это будет так.

<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
</head>
<body>
<script type="text/javascript">
    $.getJSON("names.json", function(data) {
        console.log(data);
        $('body').append(data.employees[0].firstName);
    });
</script>
</body>
</html>

Конечно, вам понадобится это свойство для версии без jQuery, но сначала вам нужно проанализировать ответ JSON.

Также имейте в виду, что document.write уничтожает всю вашу страницу.


Если у вас по-прежнему возникают проблемы, попробуйте выполнить полный запрос $.ajax вместо обертки $.getJSON.

    $.ajax({
        url: "names.json",
        dataType: "json",
        success: function(data) {
            console.log(data);
            $('body').append(data.employees[0].firstName);
        },
        error: function(jqXHR, textStatus, errorThrown) {
            console.log('ERROR', textStatus, errorThrown);
        }
    });

http://api.jquery.com/jquery.ajax/

Ответ 4

Вы можете просто добавить Javascript файл в свой HTML-код, который объявит ваш объект JSON как переменную. Затем вы можете получить доступ к своим данным JSON из своей глобальной области Javascript, используя data.employees, например.

index.html:

<html>
<head>
</head>
<body>
  <script src="data.js"></script>
</body>
</html>

data.js:

var data = {
  "employees": [{
    "firstName": "Anna",
    "lastName": "Meyers"
  }, {
    "firstName": "Betty",
    "lastName": "Layers"
  }, {
    "firstName": "Carl",
    "lastName": "Louis"
  }]
}

Ответ 5

Если вы хотите использовать PHP.

<?php
    $contents = file_get_contents('names.json');
?>
<script>
    var names = <?php echo $contents; ?>
    var obj = JSON.parse(names);

    //use obj
</script>

При необходимости используйте его async:

<script>
    $(document).ready(function(){
        $.get("get_json.php?file=names",function(obj){
            //use obj here          
        },'json');
    });
</script>

PHP:

<?php
    $filename = $_GET['file'] . '.json';
    $data['contents'] = file_get_contents($filename);
    echo json_encode($data);
?>