我使用json-server
将json数据作为REST api推送。
服务器返回(上面)获取请求,如下所示:
http://localhost:3000/items?itemid=534
返回:
[
{
"itemid": 534,
"type": "textcontent",
"icon": "http://exampple.com/1png",
"title": "John",
"description": "Description",
"url": "http://example.net/project/doSomething"
}
]
返回JSON array
,但不是JSON object
。
我该怎么做才能返回json对象
数据文件是:data.json
{
"items": [
{
"itemid": 534,
"type": "textcontent",
"icon": "http://exampple.com/1png",
"title": "John",
"description": "Description",
"url": "http://example.net/project/doSomething"
},
{
"itemid": 234,
"type": "textcontent",
"icon": "http://exampple.com/2png",
"title": "Smith",
"description": "Description2",
"url": "http://example.net/project/doSomething2"
}
]
}
答案 0 :(得分:0)
如果您将数据更改为:
Function InStrC(ByVal SearchIn As String, ByVal SoughtCharacters As String) As Integer
'--- Returns the position of the first character in SearchIn that is contained
'--- in the string SoughtCharacters. Returns 0 if none found.
Dim i As Integer
On Error Resume Next
SoughtCharacters = UCase(SoughtCharacters)
SearchIn = UCase(SearchIn)
For i = 1 To Len(SearchIn)
If InStr(SoughtCharacters, Mid(SearchIn, i, 1)) > 0 Then
InStrC = i: Exit Function
End If
Next i
InStrC = 0
End Function
然后您可以使用以下网址访问各个项目: http://localhost:3000/items/534
答案 1 :(得分:0)
很简单。您需要做的就是在客户端上存储数据后对其进行映射。我已经使用了Rx.Observable.from方法,但这可以与其他方法一起使用,例如fromPromise。
const data = [{
"itemid": 534,
"type": "textcontent",
"icon": "http://exampple.com/1png",
"title": "John",
"description": "Description",
"url": "http://example.net/project/doSomething"
}
];
const data$ = Rx.Observable.from(data)
.map(arr=> {
return JSON.stringify({
"items": arr
});
});
data$.subscribe(x=> console.log(x));
// this will print out something like this
//{"items":{"itemid":534,"type":"textcontent","icon":"http://exampple.com/1png","title":"John","description":"Description","url":"http://example.net/project/doSomething"}}
另请注意,如果您在事后只需要一个对象,则可以返回{'items':arr}。
答案 2 :(得分:0)
我认为这是您正在使用的URL方案所需的行为。如果您使用标识单个资源的URL,则服务器应仅返回单个对象。
当您使用查询参数时,您的请求会显示"请返回item_id为534"的所有匹配项。这意味着json-server当然会返回一个项目数组。没有特别的知识,这个itemid
是一个独特的。如果要指定一个特殊项目,则应使用特定项目的URL,该URL应该看起来像http://localhost:3000/items/534
。
这篇文章解释了很好的概念:http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api
<强>更新强>
我的问题出错了。您希望将所有结果数据包含在一个特殊键下,而不是直接包含在数组值下。查看json-server
的文档,似乎很容易扩展现有行为。 router.render()
功能可以帮助您实现目标吗? https://github.com/typicode/json-server#module
router.render = function (req, res) {
res.jsonp({
yourkey: res.locals.data
})
}
如果您希望密钥与您要查询的资源类型相匹配,则可能需要查看req
对象以找出请求的实体类型。