3

Я использую AWS Lambda, чтобы получить JSON из открытой погоды api и вернуть его.JSON, возвращающийся с «» (Lambda)

Вот мой код:

var http = require('http'); 

exports.handler = function(event, context) { 
    var url = "http://api.openweathermap.org/data/2.5/weather?id=2172797&appid=b1b15e88fa797225412429c1c50c122a"; 
    http.get(url, function(res) { 
     // Continuously update stream with data 
     var body = ''; 
     res.on('data', function(d) { 
      body += d; 
     }); 
     res.on('end', function() { 
      context.succeed(body); 
     }); 
     res.on('error', function(e) { 
      context.fail("Got error: " + e.message); 
     }); 
    }); 
} 

Он работает и возвращает JSON, но он добавляет обратную косую черту перед каждым " как так:

"{\"coord\":{\"lon\":145.77,\"lat\":-16.92},\"weather\":[{\"id\":803,\"main\":\"Clouds\",\"description\":\"broken clouds\",\"icon\":\"04d\"}],\"base\":\"cmc stations\",\"main\":{\"temp\":303.15,\"pressure\":1008,\"humidity\":74,\"temp_min\":303.15,\"temp_max\":303.15},\"wind\":{\"speed\":3.1,\"deg\":320},\"clouds\":{\"all\":75},\"dt\":1458518400,\"sys\":{\"type\":1,\"id\":8166,\"message\":0.0025,\"country\":\"AU\",\"sunrise\":1458505258,\"sunset\":1458548812},\"id\":2172797,\"name\":\"Cairns\",\"cod\":200}" 

Это останавливает мое обслуживание по сравнению с использованием (SwiftJSON), считая это действительным JSON.

Может ли кто-нибудь сказать мне, как сделать информацию API полученной как правильно отформатированную JS НА?

.replace Я пытался так:

res.on('end', function() { 

     result = body.replace('\\', ''); 
     context.succeed(result); 
    }); 

Это ничего не меняет. Все же имел тот же результат.

ответ

8

Вы сможете разместить его в виде строки.

Try context.succeed (JSON.parse (результат))

Из документов

В результате обеспечивается должны быть JSON.stringify совместимы. Если AWS Lambda не может выровнять или встретить другую ошибку, генерируется необработанное исключение, а заголовок ответа X-Amz-Function-Error установлен на Unhandled.

http://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-context.html

Поэтому в основном он принимает вашу строку JSON в виде строки и вызова JSON.stringify на него ... избежав таким образом все цитаты, как вы видите. Передайте обработанный объект JSON для успеха, и у него не должно быть этой проблемы

+0

Спасибо Джеффу. – JamesG

-2

Вы можете использовать:

res.on('end', function() { 
context.succeed(body.replace(/\\/g, '')); 

Чтобы заменить \ ничего ..

+0

Где я могу это использовать? – JamesG

+0

see me OQ edit^ – JamesG

+0

Я обновил ответ, если его не работает try json.parse (body) –

Смежные вопросы