javascript - AJAX/JavaScript : parsing JSON that contains an array

标签 javascript html json ajax

我正在尝试解析我的页面通过 AJAX 响应获得的 JSON 消息,但是它一直抛出以下错误,我不知道为什么:

“SyntaxError: JSON.parse: JSON 数据的数组元素后应为‘,’或‘]’”

这是我页面的 javascript 的样子:

var xhttp = new XMLHttpRequest();

xhttp.onreadystatechange = function() {
    if (xhttp.readyState == 4 && xhttp.status == 200) {
         var Response = JSON.parse(xhttp.responseText);
    }
}

服务器返回的 JSON 如下所示:

{
    "Error": "",
    "ClientInfo": [{
        "ID": 1,
        "Name": "Bill"
    }, {
        "ID": 2,
        "Name": "Sally"
    }]
}

知道我做错了什么吗? JSON 验证器说它是有效的 JSON....

最佳答案

更新

正是 Error: 键让解析器将其吐出。查看演示。 更新了演示以包含带有 Error: 的 JSON 以比较结果。不幸的是,我不得不注释掉控制台记录了错误 JSON,因为调试器立即发现了脚本错误。幸运的是,该演示仍然有效,因此您可以在加载后忽略初始错误。

测试 1

  1. 首先尝试使用 info 按钮。 [结果:莎莉]
  2. 接下来单击error0 按钮。 [结果:莎莉]
  3. 然后尝试使用 error1 按钮。 [结果:未定义]

所以它似乎解析如果你:

  1. 删除错误:“” 或者
  2. Error: "" 放在数组中。

测试 2

复制 info JSON 然后验证它。 JSONLint

当你使用 JSONLint 时,你必须剥离它:

{
    "ClientInfo": [
        {
            "ID": 1,
            "Name": "Bill"
        },
        {
            "ID": 2,
            "Name": "Sally"
        }
    ]
}

现在复制错误 JSON 并验证它。

{
    "Error": "",
    "ClientInfo": [{
        "ID": 1,
        "Name": "Bill"
    }, {
        "ID": 2,
        "Name": "Sally"
    }]
}

它们都应该有效,但调试器和解析器拒绝 error JSON。

片段

// Prepare JSON
var info =
  '{"ClientInfo": [' +
  '{"ID": 1, "Name": "Bill"},' +
  '{"ID": 2, "Name": "Sally"} ]}';

var error0 =
  '{"ClientInfo": [' +
  '{"ID": 1, "Name": "Bill"},' +
  '{"ID": 2, "Name": "Sally"},' +
  '{"Error": ""} ]}';


var error1 =
  '{"Error": ""},' +
  '{"ClientInfo": [' +
  '{"ID": 1, "Name": "Bill"},' +
  '{"ID": 2, "Name": "Sally"} ]}';


// Create a function that parses JSON Object

function JSONObj(json) {
  var jsonObj = JSON.parse(json);
  return jsonObj;
}

// A function that logs results one at a time so we can compare results

function processLog(result) {
  console.log('Result: ' + result);
}

/* Test info and errors */

var lastClient = JSONObj(info).ClientInfo[1].Name;

var errorA = JSONObj(error0).ClientInfo[1].Name;

var errorB = JSONObj(error1).ClientInfo[1].Name;
<script src="http://gh-canon.github.io/stack-snippet-console/console.min.js"></script>

<ol>
  <li>Remove this: <pre><code>"Error": "",</code></pre>
  </li>
  <li>Separate into segments (see script)</li>
  <li>Wrap each segment with single quotes `'`</li>
  <li>Add a `+` after each segment</li>
</ol>

<button onclick="processLog(lastClient);">info</button>
<button onclick="processLog(errorA);">error0</button>
<button onclick="processLog(errorB);">error1</button>

关于javascript - AJAX/JavaScript : parsing JSON that contains an array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36561689/

相关文章:

json - 在 Scala/Play 中解析 JSON 日期时间

php - Swift Php Json 汉字

javascript - 使移动页面始终在顶部加载

html - 如何在 HTML 中创建下拉菜单

javascript - 使用 javascript 从 div 元素获取背景图像的 url

html - 为什么我不能对齐我的文字和按钮?

javascript - 是否存在将 "foo:blah"转换为 JSON 的程序?

javascript - waitForKeyElements 不等待某些浏览器上的 ajax 加载数据?

javascript - Ajax 在下拉列表中包含数据

javascript - 如何在 angularJS 中重构指令代码