【问题标题】:Incorrect type. Expected "object"类型不正确。预期的“对象”
【发布时间】:2019-05-28 15:47:16
【问题描述】:

我有这个 json,但 Visual Studio Code 在标题中给了我警告。

[
    {
      "title": "Book A",
      "imageUrl": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ6B1bizZf6gt_7vtUZXx0cPf81u07iJf9ZPBMPn5kM_5pyIRnE",
      "description": "Cool book!",
      "price": "10",
      "id": "0.9910457947149673"
    },
    {
      "title": "Book B",
      "imageUrl": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ6B1bizZf6gt_7vtUZXx0cPf81u07iJf9ZPBMPn5kM_5pyIRnE",
      "description": "Nice!",
      "price": "12",
      "id": "0.3677736742556723"
    },
    {
      "id": "0.2599869075653567",
      "title": "Αχίλλιου Πόλης",
      "imageUrl": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBxMSERUTEhIWFhUXGRgZGBgWGBgYHRYZGBsaGB4YGxkYHSggGBolIBgXITEhJSkrLi4uGB8zODMtNygtLisBCgoKDg0OGBAQGi0dHh8rKy0tLSsrLS0tLSsrKy0tKy0rLS0tLS0tLS0tLS0tLS0tLS03LS0tLTcrLTc3NzcrLf/AABEIAOEA4AMBIgACEQEDEQH/xAAcAAACAgMBAQAAAAAAAAAAAAAABQQGAgMHAQj/xABGEAABAwEGBAMEBggFAgcBAAABAAIRAwQFEiExQQZRYXETIpEygbHBBxRCUqHwIzM0YnJz0eEVJILC8RayNURTVIOSoiX/xAAYAQEBAQEBAAAAAAAAAAAAAAAAAQIDBP/EACERAQEAAgIDAAMBAQAAAAAAAAABAhESIQMxQSJRkTIT/9oADAMBAAIRAxEAPwC/IQhUCEIQCELCvWaxpe8hrWiSTsEGaFjTeHAOaZBEgjcHdZIBCEIBCEIBCEIBCEIBCEIBCEIBCEIBCEIBCEIBCEIBKbzv+lQfgdLjEnDEN7k79Ej4r4mdTqOoU3YSMIJGpxbA7Kr2yyP8NgY5jsbnE43VJAxHzZHTJB0SzcR0H6OcO7T8VNpXhSdo9use/wB65lcdpfSfUpOmWhj83NIe06Fpw/hOyd0ra7EQ9hJfu1khw2g4vL26oL2qjx1UqVm/VKAlxaalToxuje52Vmr120qRe4w1jZPQAJHwq9pa+01XsFSucRBc2WsGTW68vis39OuHV5If0bXv4tnNFx81LIdWHT00VwXK7RUF3XnjY4Gk8ycJBAY45j3HNdTa4ESDkcx2KY34vmx1dz6UXxxHRspiqKgGzgwlp6A81sua/aVqzpB5bn5i0gZbTzUy8LEyvTdSqNlrhB/r3XNLJba10Wh9J4L6TgSP3vuuB2OxUtsMMMc5qe11tvFdClU8J7aofsPDJxdRGoUm237TpUxUf",
      "description": "A cool book. Everyone should buy it!",
      "price": "10"
    },
    {
      "id": "0.8862598606325078",
      "title": "xvbxb",
      "imageUrl": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ6B1bizZf6gt_7vtUZXx0cPf81u07iJf9ZPBMPn5kM_5pyIRnE",
      "description": "xvcxv",
      "price": "20"
    }
]

为什么?

【问题讨论】:

  • 您是否在文件选项卡中打开它时遇到“错误”,或者您是否有相应的代码?事实上,很难说出你在问什么。

标签: json visual-studio-code


【解决方案1】:

顶级JSON 在历史上应该是一个对象。不是数组或原语。

在实践中,该规则的执行情况各不相同。 VSCode 提醒您,您不是从最可互操作的意义上看 JSON。

编辑: 有各种定义 JSON 的 RFC,历史上的通常更严格,但现在大多已被取代。

我无法找到强制执行“顶级项目是对象”规则的官方 JSON 定义。我怀疑这只是浏览器支持和其他解析器的现实有一段时间了,所以在被适当标准化之前它成为了事实上的标准。

例如: rfc4627rfc7159rfc8259

【讨论】:

  • 鉴于我在您的链接或 Can an array be top-level JSON-text? 中阅读 McKeenam 表格的方式,这似乎不正确
  • 没错,与几年前相比,我现在找到的标准文档要宽松得多。
  • 感谢您的更新,但您没有删除您的“必须......成为一个对象”,现在这不是真的,也不是从那些 RFC 文档的简要阅读(包括 2006 年的声明“JSON 文本是序列化的对象或数组。”)。 应该是一个对象是合理的,但must是一个对象是不正确的。
  • 我回到了最早提到的 json 我可以在这里找到:web.archive.org/web/20030228034147/http://www.crockford.com/…,即使在那里它也不是铁板钉钉的。似乎 JSON 的初始实现形成了一个事实上的规则,即顶级项目成为一个对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-19
  • 2019-10-30
  • 2012-08-17
  • 2016-08-05
  • 2021-10-11
相关资源
最近更新 更多