文字列の一部を操作して文字列部分を反復することで、この応答を有効なJSオブジェクトの配列に解析できます。
私は以下のコードを実行して、配列文字列の各 "オブジェクト"に対応するJSオブジェクトの配列を取得します。また、無効なタイムスタンプ値をJS Dateオブジェクトに変換します。
let args = "[{id:1049105, api_url:'', timestamp: 2017-07-12T00:34:36.000Z},{id:993221, api_url:'', timestamp: 2017-07-12T00:34:18.000Z}]"
let splitArgs = args.split('},')
// Create an Array of parsed Objects
let objs = splitArgs.map(arg => {
// remove whitespace
let cleanArg = arg.trim()
// Remove enclosing [ { } ] characters
if (arg.startsWith('[')) {
cleanArg = cleanArg.substr(1, arg.length)
}
if (cleanArg.startsWith('{')) {
cleanArg = cleanArg.substr(1, arg.length)
}
if (cleanArg.endsWith(']')) {
cleanArg = cleanArg.substr(0, arg.length - 1)
}
if (cleanArg.endsWith('}')) {
cleanArg = cleanArg.substr(0, arg.length - 1)
}
// Remove any quotations and then split each of the properties out
let props = cleanArg.replace(/[\']+/, '').split(',')
// For each prop, get the value and assign it to the new object
// that will be returned by reduce()
return props.reduce((obj, prop) => {
let splitIndex = prop.indexOf(':')
let key = prop.substr(0, splitIndex)
let val = prop.substr(splitIndex + 1, prop.length)
if (key.toLowerCase() === 'timestamp') {
obj[key] = (new Date(val))
} else {
obj[key] = val
}
return obj
}, {})
})
console.log(objs.map(obj => { return obj.id })) // [1049105, 993221]
これはまったく有効なJSONではありません。そのプロパティはすべて有効であるためには、それらの周りの引用符を使用する必要があります。 – wilsonhobbs
あなたはすべてを解析しようとしていますか?あなたはもう少し明確になりますか? –
APIから有効なJSONを取得しているという気がしますが、すでに解析済みです。たとえば、 'json'データ型を指定して' jQuery.ajax'を使用して、要求をサーバに送信する場合です。その場合は、あなたの質問に解析されたオブジェクトのログ出力を貼り付けたかもしれません。もしそうなら、 'JSON.parse()'はまったく必要ありません。そうでない場合は、コードサンプルを貼り付けて、自分が何をしているのかを見やすくすることをお勧めします。 – Marconius