【问题标题】:AngularJS: Unable to parse a list of JSONAngularJS:无法解析 JSON 列表
【发布时间】:2017-01-31 15:17:38
【问题描述】:

以下是我要解析的 JSON:

{[{"name":"Technology"},{"name":"Engineering"},{"name":"Business"}]}

我收到以下错误:

Unexpected token [ in JSON at position 1
    at JSON.parse (<anonymous>)
    at fromJson

我正在从服务中获取数据并使用以下命令将其保存到控制器范围内:

vm = this;
vm.sectorList = response.data;

还有我的 HTML:

<div ng-repeat="sector in ctrl.sectorList">
    {{sector.name}}
</div>

【问题讨论】:

  • 这不是一个有效的 JSON 文档。去掉环绕的花括号,你就可以开始了。
  • JSON 格式不正确,应该是这个{keyname:[{"name":"Technology"},{"name":"Engineering"},{"name":"Business"}]}
  • 服务中处理响应的代码可能比控制器更有趣。将其包含在您的问题中会很有帮助。

标签: javascript angularjs json


【解决方案1】:

JSON 无效,因此出现错误。您缺少与 JSON 数组值一起使用的键。例如(添加键“anything”)将起作用:

{"anything": [{"name":"Technology"},{"name":"Engineering"},{"name":"Business"}]}

【讨论】:

    【解决方案2】:

    如果响应是一个数组,则不应将其括在大括号 {} 中。这将是有效的 JSON:

    [{"name":"Technology"}, {"name":"Engineering"}, {"name":"Business"}]
    

    当对象将字符串作为输入参数时,您还尝试在对象上使用JSON.parse。如果你想把一个对象变成一个 JSON 字符串,你应该使用JSON.stringify

    【讨论】:

      【解决方案3】:

      您的JSON 无效您可以验证您的JSON Here

      应该是:

      [{
          "name": "Technology"
      }, {
          "name": "Engineering"
      }, {
          "name": "Business"
      }]
      

      【讨论】:

      • 感谢您提供指向 JSON 验证器的链接
      【解决方案4】:

      您应该删除 JSON 中 [] 之前的花括号:

      [{"name":"Technology"},{"name":"Engineering"},{"name":"Business"}]
      

      【讨论】:

        【解决方案5】:

        你的钥匙不见了。

        {"YourKEY": [{"name":"Technology"},{"name":"Engineering"},{"name":"Business"}]}
        

        你不能在没有键的情况下访问数组的对象。

        【讨论】:

          【解决方案6】:

          您需要将数组分配给对象的属性。不能在没有属性的对象内部分配数组

          {  
             "items":[  
                {  
                   "name":"Technology"
                },
                {  
                   "name":"Engineering"
                },
                {  
                   "name":"Business"
                }
             ]
          }
          

          在 ng-repeat 中它应该改变如下

          <div ng-repeat="sector in ctrl.sectorList.items">
              {{sector.name}}
          </div>
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2019-05-21
            • 1970-01-01
            • 2017-10-20
            • 2016-05-20
            • 1970-01-01
            • 1970-01-01
            • 2021-11-28
            相关资源
            最近更新 更多