如何将字符串数组解析为JSON?

时间:2017-07-12 02:06:57

标签: javascript json node.js infusionsoft

我最难让这个字符串变得可解析。这似乎是一项简单的任务,但它让我发疯。 Infusionsoft将其作为休息钩有效载荷返回,因此我无法改变它的接收方式。

JSON.parse()无法正常工作,因为时间戳没有引号,所以我无法将其作为对象文字使用。有没有一种方法或方法,我只是没有看到解析这个,所以我可以很容易地用for循环作为一个示例获得每个id

[{id:1049105, api_url:'', timestamp: 2017-07-12T00:34:36.000Z},{id:993221, api_url:'', timestamp: 2017-07-12T00:34:18.000Z}]

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:0)

通过一些字符串操作并迭代字符串部分,我们可以将此响应解析为有效JS对象的数组。

我运行下面的代码,然后返回一个JS对象数组,映射到数组字符串中的每个“对象”。它还会将无效的时间戳值转换为JS Date Object。

const checkBook = (book_name) => {
    console.log("book name " + book_name);
    return new Promise((resolve, reject) => {
        Books.findOne({ 'Book': book_name }).then((info) => {
            if (!info) {
                console.log("no book");
                reject("there is no book");
            }
            console.log("book " + info);
            resolve(info);
        }).catch((err) => {
            console.log("htytyyt" + err);
            reject(err);
        });
    });
};

答案 1 :(得分:0)

日期采用ISO格式,因此您可以使用几个正则表达式将字符串预处理为JSON

string = "[...]"; 
string.replace(/(\d{4}-\d_2+-\d{2} ... /g, '"$1"'); // enclose dates in quotes
string.replace(/'/g, '"'); // replace single quotes with double quotes
string.replace(/id/g, '"id"'); // enclose id in double quotes
// repeat for api_url and timestamp

data = JSON.parse(string);

答案 2 :(得分:0)

我是scanf的作者,你想试试这个:

const {sscanf} = require('scanf');

let str = `[{id:1049105, api_url:'', timestamp: 2017-07-12T00:34:36.000Z},{id:993221, api_url:'', timestamp: 2017-07-12T00:34:18.000Z}]`;
let chunks = str.split('},{');

for (let chunk of chunks) {
  let obj = sscanf(chunk, "id:%d, api_url:%s, timestamp: %s}", 'id', 'api_url', 'timestamp')
  console.log(obj);
}

/*
{ id: 1049105,
  api_url: '\'\'',
  timestamp: '2017-07-12T00:34:36.000Z' }
{ id: 993221,
  api_url: '\'\'',
  timestamp: '2017-07-12T00:34:18.000Z' }
*/

使用或BUG可能存在一些问题,您可以提交issue以获取更多信息。