我有调用外部Api的javascript函数,并在大多数情况下返回一个有效的JSON字符串。
function (successResponse) {
{
console.log(successResponse);
}
但是,在某些情况下,它会返回以下无效的JSON
Response: Status=200, Text: {"createdTime":"2017-05-08T14:47:56Z","lastUpdatedTime":"2017-05-08T14:47:56Z","createdMode":"API","uuid":"e333c1-3599-36d7-9ef5-dc22c79a4a52","userId":"anonymous"}, Error Message: null
如何解析上面的字符串以获取' uuid'
由于
答案 0 :(得分:1)
如果您希望使用该格式的响应字符串,则可以使用正则表达式来提取响应的“文本”部分:
function (successResponse) {
{
var responseText = successResponse.match(/\{.+\}/);
var responseTextJSON = JSON.parse(responseText);
var uuid = responseTextJSON.uuid;
console.log(uuid);
}
答案 1 :(得分:1)
也许你可以自己解析字符串以排除{}之外的所有内容?
var apiResponse = 'Response: Status=200, Text: {"createdTime":"2017-05-08T14:47:56Z","lastUpdatedTime":"2017-05-08T14:47:56Z","createdMode":"API","uuid":"e333c1-3599-36d7-9ef5-dc22c79a4a52","userId":"anonymous"}, Error Message: null';
var apiResponse_fixed = apiResponse.substring((apiResponse.indexOf("{") - 1), (apiResponse.lastIndexOf("}") + 1));
var json_obj = JSON.parse(apiResponse_fixed);
console.log(json_obj.uuid);
答案 2 :(得分:0)
看起来服务器所有者有点懒,并编写了一个错误响应,其中包含一个类似JSON的内部部分,但被一些非JSON元素包围。
如果您迫切希望解决这种情况并且无法修复服务器输出格式,我的建议如下:
notQuiteJson = 'Response: Status=200, Text: {"createdTime":"2017-05-08T14:47:56Z","lastUpdatedTime":"2017-05-08T14:47:56Z","createdMode":"API","uuid":"e333c1-3599-36d7-9ef5-dc22c79a4a52","userId":"anonymous"}, Error Message: null';
madeJson = notQuiteJson.replace('Response: Status=200, Text:','{"Response": {"Status":200}, "Text":').replace('Error Message: null','"ErrorMessage": null}')
obj = JSON.parse(madeJson)
console.log(obj.Text.uuid) // Result: "e333c1-3599-36d7-9ef5-dc22c79a4a52"
当然,这仅在错误消息始终如此时才有效。实际上,您可能希望使用3位数的通配符来覆盖范围"状态="码。但是,您还必须确信所有错误模式在响应的开始和结束时都会生成相同的非JSON文本。
@ sp00m和@Bergi,不要杀了我:你当然是对的,但这只是因为如果海报别无选择8 - )