从多个 API 调用中获取并加入 JSON 对象
Fetch and join JSON objects from multiple API calls
对不起,如果我的英语不好,如果你不明白,请写评论(我会编辑post)。我有获取 JSON 并按顺序 () 解析它的脚本。它适用于一个 JSON。我的问题是我需要同时解析多个 JSON(如脚本 3 JSON)以获得正确的 md5 顺序。
我尝试连接 JSON 个文件以获取一个 JSON 进行解析,但它没有连接。脚本:
var jsonForparse =[]
for (page=1;page<3;page++) {
url = "https://some.url/to/json"+page+".json";
xhr.open('GET', url, false);
xhr.send();
json=xhr.responseText ;
//Parse json string
json=JSON.parse(json);
//Connect jsons to jsonForparse
js =json.concat(js)
}
//Parse jsonForparse
md5= ids.map(id => jsonForparse.posts.find(post => post.id === id))
我应该如何解析 json 或连接 json 来解析它们以获得正确的 md5 顺序
例子:
应该得到:
md5=[12,34,56,78,90,100]
订单:
ids=[2227726,2277,2218681,22881,6659,2236659]
Json1:
{
"posts":[
{
"id":2236659,
"file":{
"size":1325351,
"md5":"100"
}
},
{
"id":2227726,
"file":{
"size":1182791,
"md5":"12"
}
},
{
"id":2218681,
"file":{
"size":1241188,
"md5":"56"
}
}
]
}
Json2:
{
"posts":[
{
"id":6659,
"file":{
"size":1325351,
"md5":"90"
}
},
{
"id":2277,
"file":{
"size":1182791,
"md5":"34"
}
},
{
"id":22881,
"file":{
"size":1241188,
"md5":"78"
}
}
]
}
您需要像现在一样将每个 JSON 解析为对象,而不是加入它们,之后您必须对它们进行排序:
const obj1 = JSON.parse(json1)
const obj2 = JSON.parse(json2)
... \ this could be a loop if you have more
const obj = [...obj1.posts, ...obj2.posts].sort((a,b) => a.file.md5 - b.file.md5)
const ids = obj.map(e => e.id)
const md5s = obj.map(e => e.file.md5)
拥抱 JS 的异步特性:p,在第一行异步执行 http 调用。然后等待他们准备好 Promise.all ,最后合并排序。
const p = [1, 2, 3].map(idx => fetch(`https://some.url/to/json${idx}.json`).then(res => res.json()));
Promise.all(p).then(results => {
let posts = results.reduce((acc, val) => acc = [...acc, ...val.posts], [])
let sorted = ids.map(id => posts.find(post => post.id === id))
// do smthg here
});
对不起,如果我的英语不好,如果你不明白,请写评论(我会编辑post)。我有获取 JSON 并按顺序 (
我尝试连接 JSON 个文件以获取一个 JSON 进行解析,但它没有连接。脚本:
var jsonForparse =[]
for (page=1;page<3;page++) {
url = "https://some.url/to/json"+page+".json";
xhr.open('GET', url, false);
xhr.send();
json=xhr.responseText ;
//Parse json string
json=JSON.parse(json);
//Connect jsons to jsonForparse
js =json.concat(js)
}
//Parse jsonForparse
md5= ids.map(id => jsonForparse.posts.find(post => post.id === id))
我应该如何解析 json 或连接 json 来解析它们以获得正确的 md5 顺序 例子: 应该得到:
md5=[12,34,56,78,90,100]
订单:
ids=[2227726,2277,2218681,22881,6659,2236659]
Json1:
{
"posts":[
{
"id":2236659,
"file":{
"size":1325351,
"md5":"100"
}
},
{
"id":2227726,
"file":{
"size":1182791,
"md5":"12"
}
},
{
"id":2218681,
"file":{
"size":1241188,
"md5":"56"
}
}
]
}
Json2:
{
"posts":[
{
"id":6659,
"file":{
"size":1325351,
"md5":"90"
}
},
{
"id":2277,
"file":{
"size":1182791,
"md5":"34"
}
},
{
"id":22881,
"file":{
"size":1241188,
"md5":"78"
}
}
]
}
您需要像现在一样将每个 JSON 解析为对象,而不是加入它们,之后您必须对它们进行排序:
const obj1 = JSON.parse(json1)
const obj2 = JSON.parse(json2)
... \ this could be a loop if you have more
const obj = [...obj1.posts, ...obj2.posts].sort((a,b) => a.file.md5 - b.file.md5)
const ids = obj.map(e => e.id)
const md5s = obj.map(e => e.file.md5)
拥抱 JS 的异步特性:p,在第一行异步执行 http 调用。然后等待他们准备好 Promise.all ,最后合并排序。
const p = [1, 2, 3].map(idx => fetch(`https://some.url/to/json${idx}.json`).then(res => res.json()));
Promise.all(p).then(results => {
let posts = results.reduce((acc, val) => acc = [...acc, ...val.posts], [])
let sorted = ids.map(id => posts.find(post => post.id === id))
// do smthg here
});