将JSON数据读入Javascript

时间:2017-01-18 08:34:17

标签: javascript json

我在函数中有以下代码来读取JSON文件:

var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
        myObj = this.responseText;
        console.log(myObj);
        JSON.parse(myObj); // error is here
    }
};
xmlhttp.open("GET", "music-data.json", true);
xmlhttp.send();

JSON数据来自与我的html / css / js文件相同的文件夹,其结构如下:

window.MUSIC_DATA = {
  "list1": [
    {
        data here...
   },
 ],
  "list2": [
    { data here...
 ...
}

我无法解析我的对象并从list1和list2中提取我需要的内容并使用现有代码获取错误:

Uncaught SyntaxError: Unexpected token w in JSON at position 0
at JSON.parse (<anonymous>)
at XMLHttpRequest.xmlhttp.onreadystatechange

3 个答案:

答案 0 :(得分:2)

问题在于

function get_data($url)
{
    $ch = curl_init();
    $timeout = 5;
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
    $data = curl_exec($ch);
    curl_close($ch);
    return $data;
}

$url="someurl";
$data = json_decode(get_data($url), true);

foreach($data as $val)
{
    echo $val->Name_Hi;
}

那不是JSON,它是JavaScript。从文件中删除它,以便只剩下值,它可能会工作(或文件可能有其他问题)。

答案 1 :(得分:1)

正如其他人所说,您需要将服务器端文件修复为有效的JSON。如果您无法控制此文件的内容并希望避免使用字符串操作例程,那么您可以使用另一种方法:

var s = document.createElement('script');
s.src = 'music-data.json';
s.async = true;
s.onreadystatechange = s.onload = function() {
    if (!s.readyState || /loaded|complete/.test(s.readyState)) {
        var myObj = window['MUSIC_DATA'];
        console.log(myObj);

        alert(myObj.list1);
        alert(myObj.list2);
        ...
    }
};
document.querySelector('head').appendChild(s);

答案 2 :(得分:0)

改变这个:

window.MUSIC_DATA = {
  "list1": [
    {
        data here...
   },
 ],
  "list2": [
    { data here...
 ...
}

到此:

{
  "list1": [
    {
        data here...
   },
 ],
  "list2": [
    { data here...
 ...
}