【问题标题】:JSON+Javascript/jQuery. How to import data from a json file and parse it?JSON+Javascript/jQuery。如何从 json 文件中导入数据并解析?
【发布时间】:2012-05-16 10:57:00
【问题描述】:

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

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

如何在 javascript 中使用它的内容?

【问题讨论】:

  • 我已更改问题并修复了错误。现在我认为它可以得到支持,并且会成为其他人的一个很好的参考。

标签: javascript jquery json getjson


【解决方案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】:

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

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

    【讨论】:

    • 你需要在data.js文件中加入这条语句:"""" module.exports = data; """" 否则将无法通过 data.js 导入任何其他文件中的数据变量值。
    【解决方案3】:

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

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

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

    【讨论】:

    • 哦。是的。现在工作^^。太感谢了。我是问题出在 jquery 代码中。
    【解决方案4】:

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

    【讨论】:

    • 嗨,悬崖,仍然对我不起作用。你能发布整个代码吗?脚本在头脑中,但现在在身体中并且没有工作。 =/
    • @GarouDan:当你说它不起作用时,我不确定你的意思。是否调用了回调?您是否在控制台中遇到任何错误?
    【解决方案5】:

    如果你想使用 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);
    ?>
    

    【讨论】:

    • 文件已经包含了json,为什么json_encode已经是json了?他可以直接获取 names.json 而无需最后一个 php 包装器。
    • 有趣的解决方案 xbonez。我会尝试使用 jQuery e javascript,但这可能也解决了我的问题。
    • 而您正在将完全 js 对象 names 解析为 json obj。这不像将 json 编码为... double json
    • 因为当 php 使用 file_get_contents 读取它时,它会以字符串的形式读取它。字符串需要被解析才能作为 javascript 对象使用。
    【解决方案6】:

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

    但是我不想使用 jquery,所以在 vanilla JS 中,I found this quick tutorial 比 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>`
    

    【讨论】:

      【解决方案7】:

      JQuery 倒闭后谷歌发到这里的,用Fetch API

      fetch("test.json").then(async (resp) => {
        const asObject = await resp.json();
        console.log(asObject);
      })
      

      【讨论】:

        猜你喜欢
        • 2021-10-29
        • 2010-10-02
        • 2016-03-19
        • 2012-02-15
        • 1970-01-01
        • 2015-06-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多