我最难让这个字符串变得可解析。这似乎是一项简单的任务,但它让我发疯。 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}]
非常感谢任何帮助。
答案 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以获取更多信息。