21

如果我有一个JSON名为names.json的文件:

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

如何在 javascript 中使用其内容?

4

7 回答 7

12

如何做到这一点的一个例子可能是:

<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>
于 2012-05-07T23:45:37.280 回答
8

您可以简单地在 HTML 中包含一个将 JSON 对象声明为变量的 Javascript 文件。data.employees然后,您可以使用例如从您的全局 Javascript 范围访问您的 JSON 数据。

索引.html:

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

数据.js:

var data = {
  "employees": [{
    "firstName": "Anna",
    "lastName": "Meyers"
  }, {
    "firstName": "Betty",
    "lastName": "Layers"
  }, {
    "firstName": "Carl",
    "lastName": "Louis"
  }]
}
于 2015-04-02T16:10:35.673 回答
6

您的 JSON 文件不包含有效的 JSON。请尝试以下操作。

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

然后,您应该会看到响应。查看http://jsonlint.com/

于 2012-05-07T23:43:14.190 回答
5

在 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/

于 2012-05-07T23:27:02.110 回答
1

如果你想使用 PHP。

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

    //use obj
</script>

可选地,使用它异步:

<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);
?>
于 2012-05-07T23:27:52.427 回答
1

对于那些在 JQuery 倒下后由 Google 发送到这里的人,请使用Fetch API

fetch("test.json").then(async (resp) => {
  const asObject = await resp.json();
  console.log(asObject);
})
于 2019-09-16T18:27:51.880 回答
1

我知道答案是很久以前给出的,但这个结果在谷歌上显示在第一位。

但是我不想使用 jquery,所以在 vanilla JS 中,我发现这个快速教程比 senornestor 答案更干净(它还允许根据变量加载文件):

function loadJSON(filelocation, callback) {   

  var xobj = new XMLHttpRequest();
  xobj.overrideMimeType("application/json");
  xobj.open('GET', filelocation, true); // Replace 'my_data' with the path to your file
  xobj.onreadystatechange = function () {
    if (xobj.readyState == 4 && xobj.status == "200") {
      // Required use of an anonymous callback as .open will NOT return a value but simply returns undefined in asynchronous mode
      callback(xobj.responseText);
    }
  };
  xobj.send(null);  
}

function init() {
  var location = "myfile.json";
  loadJSON(filelocation=location,  function(response) {
    // Parse JSON string into object
    loadedJSON = JSON.parse(response);
    console.log(loadedJSON.somethingsomething);
  });
}

init();

并在您的 html 文件中:

`<script src="myscript.js"></script>`
于 2018-04-11T18:37:43.527 回答