Json-server 错误:数据必须是对象。需要将 JSON 数组更改为 JSON 对象

Posted

技术标签:

【中文标题】Json-server 错误:数据必须是对象。需要将 JSON 数组更改为 JSON 对象【英文标题】:Json-server Error: Data must be an object. Need to change JSON Array to JSON Object 【发布时间】:2020-01-01 16:04:49 【问题描述】:

我无法启动我的 json-server,因为 REST API: 给了我一个 JSON 数组,但我需要一个 JSON 对象来运行 json-server。是否可以使用 JSON 数组运行 json-server,或者我可以构建自己的 db.json?

我尝试将 JSON 数组放入 db.json 文件并删除方括号,但因为它之前是一个数组,所以逗号会给我一个错误。所以手动修改 db.json 也是不可能的。

npm json-server --port 3001 --watch db.json

触发此错误消息:

错误:数据必须是对象。找到对象。见 以https://github.com/typicode/json-server 为例。

更新: 我只是用花括号将数组包裹起来,并向其中添加了一个属性,如下所示:

 "countries": ["name": ...

...

]

现在我在 db.json 中有一个 JSON 对象,我可以运行 json-server。

【问题讨论】:

【参考方案1】:

万一其他人来了。假设您有一系列国家名称,您希望它的形式为

 
    "countries": [ "id": 1, "name": "Narnia", "id":2, "Sacoridia", ...]

服务器可以模拟多个“表”,因此您可以添加另一行,例如

    "cities": [ "id":1, "country_id": 1, "name":"Cair Paravel", "capital":1,...]

【讨论】:

【参考方案2】:

由于数据的格式为["name":"country name", ..., "name":"country name 2", ..., ... ],因此您必须通过提取例如名称或您想要的任何属性作为键来转换它,以获得格式 "country name": ... , "country name 2": ... ,...

例如,这可以用 javascript 来完成:

function transform(data) 
  var transformedObject = ;
  for(var i = 0; i < data.length; i++) 
    transformedObject[data[i].name] = data[i];
  
  return transformedObject;

【讨论】:

以上是关于Json-server 错误:数据必须是对象。需要将 JSON 数组更改为 JSON 对象的主要内容,如果未能解决你的问题,请参考以下文章

向 json-server 添加新对象; AngularJS

无法从 json-server 获取嵌套的对象数组

如何从 json-server 将对象数组存储在 db.json 中

如何将数据从网站保存到 json-server

Vue使用json-server来进行后端数据模拟

json-server的安装及使用