How can I get javascript to read from a .json file?

前端 未结 5 1745
-上瘾入骨i
-上瘾入骨i 2020-12-01 00:48

My script currently looks like this:



        
相关标签:
5条回答
  • 2020-12-01 01:27

    You can do it like... Just give the proper path of your json file...

    <!doctype html>
    <html>
        <head>
            <script type="text/javascript" src="abc.json"></script>
                 <script type="text/javascript" >
                    function load() {
                         var mydata = JSON.parse(data);
                         alert(mydata.length);
    
                         var div = document.getElementById('data');
    
                         for(var i = 0;i < mydata.length; i++)
                         {
                            div.innerHTML = div.innerHTML + "<p class='inner' id="+i+">"+ mydata[i].name +"</p>" + "<br>";
                         }
                     }
            </script>
        </head>
        <body onload="load()">
        <div id= "data">
    
        </div>
        </body>
    </html>
    

    Simply getting the data and appending it to a div... Initially printing the length in alert.

    Here is my Json file: abc.json

    data = '[{"name" : "Riyaz"},{"name" : "Javed"},{"name" : "Arun"},{"name" : "Sunil"},{"name" : "Rahul"},{"name" : "Anita"}]';
    
    0 讨论(0)
  • 2020-12-01 01:30

    NOTICE: AS OF JULY 12TH, 2018, THE OTHER ANSWERS ARE ALL OUTDATED. JSONP IS NOW CONSIDERED A TERRIBLE IDEA

    If you have your JSON as a string, JSON.parse() will work fine. Since you are loading the json from a file, you will need to do a XMLHttpRequest to it. For example (This is w3schools.com example):

    var xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            var myObj = JSON.parse(this.responseText);
            document.getElementById("demo").innerHTML = myObj.name;
        }
    };
    xmlhttp.open("GET", "json_demo.txt", true);
    xmlhttp.send();
    <!DOCTYPE html>
    <html>
    <body>
    
    <h2>Use the XMLHttpRequest to get the content of a file.</h2>
    <p>The content is written in JSON format, and can easily be converted into a JavaScript object.</p>
    
    <p id="demo"></p>
    
    
    <p>Take a look at <a href="json_demo.txt" target="_blank">json_demo.txt</a></p>
    
    </body>
    </html>

    It will not work here as that file isn't located here. Go to this w3schools example though: https://www.w3schools.com/js/tryit.asp?filename=tryjson_ajax

    Here is the documentation for JSON.parse(): https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse

    Here's a summary:

    The JSON.parse() method parses a JSON string, constructing the JavaScript value or object described by the string. An optional reviver function can be provided to perform a transformation on the resulting object before it is returned.

    Here's the example used:

    var json = '{"result":true, "count":42}';
    obj = JSON.parse(json);
    
    console.log(obj.count);
    // expected output: 42
    
    console.log(obj.result);
    // expected output: true

    Here is a summary on XMLHttpRequests from https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest:

    Use XMLHttpRequest (XHR) objects to interact with servers. You can retrieve data from a URL without having to do a full page refresh. This enables a Web page to update just part of a page without disrupting what the user is doing. XMLHttpRequest is used heavily in Ajax programming.

    If you don't want to use XMLHttpRequests, then a JQUERY way (which I'm not sure why it isn't working for you) is http://api.jquery.com/jQuery.getJSON/

    Since it isn't working, I'd try using XMLHttpRequests

    You could also try AJAX requests:

    $.ajax({
        'async': false,
        'global': false,
        'url': "/jsonfile.json",
        'dataType': "json",
        'success': function (data) {
            // do stuff with data
        }
    });
    

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

    0 讨论(0)
  • 2020-12-01 01:32

    Assuming you mean "file on a local filesystem" when you say .json file.

    You'll need to save the json data formatted as jsonp, and use a file:// url to access it.

    Your HTML will look like this:

    <script src="file://c:\\data\\activity.jsonp"></script>
    <script type="text/javascript">
      function updateMe(){
        var x = 0;
        var activity=jsonstr;
        foreach (i in activity) {
            date = document.getElementById(i.date).innerHTML = activity.date;
            event = document.getElementById(i.event).innerHTML = activity.event;
        }
      }
    </script>
    

    And the file c:\data\activity.jsonp contains the following line:

    jsonstr = [ {"date":"July 4th", "event":"Independence Day"} ];
    
    0 讨论(0)
  • 2020-12-01 01:34

    Instead of storing the data as pure JSON store it instead as a JavaScript Object Literal; E.g.

    window.portalData = [
      {
        "kpi" : "NDAR",
        "data": [15,152,2,45,0,2,0,16,88,0,174,0,30,63,0,0,0,0,448,4,0,139,1,7,12,0,211,37,182,154]
      },
      {
         "kpi" : "NTI",
         "data" : [195,299,31,32,438,12,0,6,136,31,71,5,40,40,96,46,4,49,106,127,43,366,23,36,7,34,196,105,30,77]
      },
      {
         "kpi" : "BS",
         "data" : [745,2129,1775,1089,517,720,2269,334,1436,517,3219,1167,2286,266,1813,509,1409,988,1511,972,730,2039,1067,1102,1270,1629,845,1292,1107,1800]
      },
      {
         "kpi" : "SISS",
         "data" :  [75,547,260,430,397,91,0,0,217,105,563,136,352,286,244,166,287,319,877,230,100,437,108,326,145,749,0,92,191,469]
      },
      {
    	"kpi" : "MID",
    	"data" : [6,17,14,8,13,7,4,6,8,5,72,15,6,3,1,13,17,32,9,3,25,21,7,49,23,10,13,18,36,9,12]
      }
    ];

    You can then do the following in your HTML

    <script src="server_data.js"> </script>
    
    
    function getServerData(kpiCode)
    {
        var elem = $(window.portalData).filter(function(idx){
            return window.portalData[idx].kpi == kpiCode;
         });
    
        return elem[0].data;
    };
    
    var defData = getServerData('NDAR');
    
    0 讨论(0)
  • 2020-12-01 01:36

    Actually, you are looking for the AJAX CALL, in which you will replace the URL parameter value with the link of the JSON file to get the JSON values.

    $.ajax({
        url: "File.json", //the path of the file is replaced by File.json
        dataType: "json",
        success: function (response) {
            console.log(response); //it will return the json array
        }
    });
    
    0 讨论(0)
提交回复
热议问题