以预期格式打印 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】:

这里有两个嵌套的异步任务,paralleleach

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从一维数组 生成树形结构对象

JavaScript打印JSON对象 - 树形结构输出 - 格式化JSON数组 - JS从一维数组 生成树形结构对象

需要将mysql数据以某种格式打印到json中

golang 以json格式打印struct

如何以 json 格式(双引号)漂亮地打印(人类可读的打印)Python dict? [复制]