【问题标题】:Print JSON array in expected format以预期格式打印 JSON 数组
【发布时间】: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",
            },
        ]
    },
]

我得到了值,但在获取值时有些困惑。

【问题讨论】:

    标签: arrays json node.js express multidimensional-array


    【解决方案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
     }
     );
    
    }
    

    我无法对此进行测试,所以不要认为它是一个精确的解决方案,而是一个解释。我重命名了你的变量以便更好地理解,你不必在你的代码中这样做。要记住的关键是您在这里有两个嵌套任务,例如嵌套循环,您还必须在两个级别上处理结果。

    【讨论】:

      猜你喜欢
      • 2020-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多