преобразование массива в формат json в nodejs - PullRequest
0 голосов
/ 05 декабря 2018

Привет, у меня есть список, который состоит из данных, и я хочу эти данные в определенном формате json следующим образом:

[
  {
    "slideName": "s0",
    "imageUrl":
      "https://s3.amazonaws.com/lifestyle345/testing/slides/cbaa5e650152a0332b494f0074985b6e-0.png",
    "txtUrl":
      "https://s3.amazonaws.com/lifestyle345/testing/speeches/virtualReality.txt"
  }
]

следующий код:

var list = [];
var AWS = require('aws-sdk');

//var oldPrefix = 'texts/';
var s3 = new AWS.S3({params: {Bucket: 'lifestyle345'}});
exports.handler = (event, context, callback) => {
    function listAllKeys(s3bucket, start, end) {
        s3.listObjects({
            Bucket: s3bucket,
            Marker: start,
            MaxKeys: 1000,
        }, function(err, data) {
            if (data.Contents) {
                //console.log("Length" +data.Contents.length)
                for (var i = 0; i < data.Contents.length; i++) {
                    var key = "https://s3.amazonaws.com/lifestyle345/" +
                    data.Contents[i].Key;  //See above code for the structure of data.Contents
                    //console.log("KEY =" +key);
                    if (key.substring(0, 19) != end) {
                        list.push(key);
                    } else {
                        break;   // break the loop if end arrived
                    }
                }
                console.log(list);
                var jsonString = JSON.stringify(list );
                //console.log('Total - ', list.length);
                console.log(jsonString);
            }
        });
    }

    listAllKeys('lifestyle345', 'testing/slides', 'testing/speeches');

}

сгенерированный вывод:

'https://s3.amazonaws.com/lifestyle345/testing/slides/cbaa5e650152a0332b49400074985b6e-0.png',' https://s3.amazonaws.com/lifestyle345/testing/slides/cbaa5e650152a0332b494f0074985b6e-1.png',

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Вы помещаете только необработанные значения в массив list.Возможно, вы захотите либо вставить готовые объекты прямо в функцию listAllKeys, либо создать свои объекты, как только закончите со списком.Судя по вашим именам (slideName, imageUrl и textUrl), кажется, что у вас там больше вещей.

Соответствующая часть здесь (написана чуть более кратко на javascript):

for (let i = 0; i < data.Contents.length; i++) {
 const key = `https://s3.amazonaws.com/lifestyle345/${ data.Contents[i].Key }`;
  if (key.substring(0, 19) != end) {
     const endObject = {
         slideName: 'Whatever slide. Where do you get the info from?',
         imageUrl: key,
         textUrl: 'whatever, also no info',
     }    
     list.push(endObject );
  } 

}

Как видите, я помещаю сам объект в список, а не просто строку с URL-адресом.

В качестве альтернативы, вы можете составить список, как и тогда, и затемв конце зациклите его и получите ваш список:

const list = [];
for (...) {
  ...
  list.push(url);
}
// after you get the list of URLs, you get the objects:
const objects  = list.map(function (url) {
  return {
         slideName: 'Whatever slide. Where do you get the info from?',
         imageUrl: url,
         textUrl: 'whatever, also no info',
     }
});

console.log(JSON.stringify(objects, null, 2));

Примечание 1 : я не знаю, откуда вы взяли textUrl, поэтому сейчас я его пропускаю, Примечание 2 : вам лучше переместить оператор var list = [] внутри вашей функции listAllKeys, или он может содержать все значения, которые вы получили, с первого раза, когда вы начали вызывать функцию.

0 голосов
/ 05 декабря 2018

вы можете сделать следующее

console.log(JSON.stringify(list, undefined, 2));

первый параметр приводит в порядок список, второй я, честно говоря, не знаю, что он делает, но вы должны включить его, а третий - количество отступов, которые вынужно в вашем формате.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...