以预期格式打印 JSON 数组
Posted
技术标签:
【中文标题】以预期格式打印 JSON 数组【英文标题】:Print JSON array in expected format 【发布时间】:2016-10-08 07:42:45 【问题描述】:这是从我的表格中获取详细信息的代码。
function listshops(callback)
var array=[3,4];/*shopId*/
async.each(array,function(dat,callback)
async.parallel([
function(callback)
client.connection.query('select * from shop where shopId=?',dat,function(err,data1)
callback(null,data1);
);
,
function (callback)
client.connection.query('select * from image where shopId=?',dat,function(err,data2)
callback(null,data2);
);
],
function(err,data)
var result = data.reduce(function(prev, curr) /*merging the array*/
return prev.concat(curr);
);
console.log(result);
);
);
我得到这样的输出:: http://i.stack.imgur.com/NVUAu.png
我想以以下格式打印我的结果:
"shops": [
"shopId": "3",
"shopName": "1",
"address": "abc",
"contactNumber":"1234"
"images": [
"imageId": "1",
"shopId": "3",
"imageUrl": "aaa",
,
"imageId": "2",
"shopId": "3",
"imageUrl": "bbb",
,
]
,
"shopId": "4",
"shopName": "2",
"address": "bbb",
"contactNumber":"1234"
"images": [
"imageId": "3",
"shopId": "4",
"imageUrl": "ccc",
,
"imageId": "4",
"shopId": "4",
"imageUrl": "ddd",
,
]
,
]
我得到了值,但在获取值时有些困惑。
【问题讨论】:
【参考方案1】:这里有两个嵌套的异步任务,parallel
和 each
。
Parallel 负责获取一家商店的商店信息和图像,并使用包含任务结果的二元素数组调用最终回调。
这是您对并行的最终回调:
function(err,data)
var result = data.reduce(function(prev, curr) /*merging the array*/
return prev.concat(curr);
);
console.log(result);
);
data
应该是一个二元素数组,其中元素 0 是商店,元素 1 是图像。您只需将这些连接在一起。如果您希望您的图片采用所需的格式,您应该使用data[0].images = data[1]
将图片密钥添加到您的商店。
到目前为止,这是一家商店。然后是外部each
循环。你目前没有给这个最终回调,也没有对结果做任何事情。
类似这样的:
function listshops(callback)
var array=[3,4];/*shopId*/
async.each(array,function(dat,eachCallback)
async.parallel([
function(parallelCallback)
client.connection.query('select * from shop where shopId=?',dat,function(err,data1)
parallelCallback(null,data1);
);
,
function (parallelCallback)
client.connection.query('select * from image where shopId=?',dat,function(err,data2)
parallelCallback(null,data2);
);
],
// this is the final callback for parallel
function(err,parallelResult)
// construct one shop
var shop = parallelResult[0];
shop.image = parallelResult[1];
// pass the shop info back as a result to each
eachCallBack(shop);
);
,
// this is the final callback for each
function(err, eachResult)
// eachResult is an array with the shops returned from parallel callback
var result =
shops: eachResult
return result
);
我无法对此进行测试,所以不要认为它是一个精确的解决方案,而是一个解释。我重命名了你的变量以便更好地理解,你不必在你的代码中这样做。要记住的关键是您在这里有两个嵌套任务,例如嵌套循环,您还必须在两个级别上处理结果。
【讨论】:
以上是关于以预期格式打印 JSON 数组的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript打印JSON对象 - 树形结构输出 - 格式化JSON数组 - JS从一维数组 生成树形结构对象
JavaScript打印JSON对象 - 树形结构输出 - 格式化JSON数组 - JS从一维数组 生成树形结构对象