2016-08-27 5 views
-1

Я видел много сообщений о том, как превратить строку Javascript в JSON, но не о том, как включить объект JSON в строку javascript.JSON to JavaScript String

Приведенный ниже фрагмент кода возвращает правильные значения, когда они отображаются в консоли javascript, однако, когда я пытаюсь выполнить сравнение строк с JSON.element, это не удается.

Вот JSON, который возвращается URL-запросом.

{ 
    "id": "1e003033", 
    "name": "camera", 
    "last_app": null, 
    "last_ip_address": "192.168.0.27", 
    "last_heard": "2016-08-27T14:22:49.762Z", 
    "product_id": 6, 
    "connected": true, 
    "platform_id": 6, 
    "cellular": false, 
    "status": "normal", 
    "pinned_build_target": "0.5.2", 
    "variables": { 
    "lonlat": "string", 
    "speedmph": "string", 
    "sats": "string" 
    }, 
    "functions": [] 
} 

Вот фрагмент кода:

 requestURL_O = "https://api.spark.io/v1/devices/" + deviceID + "/?access_token=" + accessToken; 
     $.getJSON(requestURL_O, function(jonline){ 
        console.log(jonline.connected); 
        jstr = jonline.connected; 
        dt_str = jonline.last_heard; 
        console.log(jstr); 
        if (jstr == "true"){ 
        online_status = true; 
        console.log("equal = TRUE"); 
        } 
        else { 
        online_status = false; 
        jstr = jonline.last_heard; 
        console.log(jonline.last_heard); 
        console.log("equal = FALSE"); 
        } 
     }); 

console.log (JStr) возвращается в действительности. console.log (jonline.connected) возвращается как true.

Сравнение ниже всегда проходит к другому.

if (online_status) { 
    document.getElementById("temp").innerHTML = "Online"; 
    document.getElementById("tstamp").innerHTML = "Last heard from (GMT) Date/Time   -> " + jstr; 
} 
else { 
    document.getElementById("temp").innerHTML = "NOT Online"; 
    document.getElementById("tstamp").innerHTML = "Last heard from (GMT) Date/Time   -> " + dt_str; 
} 

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

Заранее благодарим за любую помощь!

+1

JSON.stringify()? –

+0

Возможный дубликат [Преобразование JS-объекта в строку JSON] (http://stackoverflow.com/questions/4162749/convert-js-object-to-json-string) –

+0

'$ .getJSON' уже преобразует строку, которая была отправлена сервером в формате JSON в объект JavaScript. –

ответ

5

jonline.connect! = Jonline.connected

Смените jstr = jonline.connect; в jstr = jonline.connected;

Вам не нужно преобразовать JSON строки в объект JS, так как JQuery в $ .getJSON уже автоматически преобразует это.

Кроме того, косоглазие отметил в комментарии ниже, что вы также сравнивая логическое истинное из объекта в строку «истинной». Это не одно и то же.

if (jstr == "true") { Изменение к if (jstr == true) {

Это происходит потому, что у вас есть линия "connected": true в вашем JSON, а не "connected": "true".

В соответствии с вашим комментарием кажется, что еще одна проблема заключается в том, что код, который вы используете для установки содержимого html на основе вашего результата, выполняет сравнение перед выполнением обратного вызова JSON. Все, что вы добавляете после $ .getJSON(), произойдет мгновенно, даже если json еще не загружен, beucase - это асинхронная функция.

Вы можете добавить свой код прямо в функции обратного вызова:

if (jstr == "true") { 
    online_status = true; 
    document.getElementById("temp").innerHTML = "Online"; 
    document.getElementById("tstamp").innerHTML = "Last heard from (GMT) Date/Time   -> " + jstr; 
} else { 
    online_status = false; 
    jstr = jonline.last_heard; 

    document.getElementById("temp").innerHTML = "NOT Online"; 
    document.getElementById("tstamp").innerHTML = "Last heard from (GMT) Date/Time   -> " + dt_str; 
} 

Или если online_status переменное вы можете обратиться к извне вашей функции, которые в настоящее время он не является, если я правильно понял ваш комментарий , вы можете создать функцию с вашим сопоставлением в сети и вызвать ее в обратном вызове $ .getJSON после установки значений.

+1

Это часть проблемы, но не все. OP сравнивает «jstr ==» true », который будет сравнивать логическое с строкой, что приведет к некорректному результату, когда' jstr' является «истинным». –

+1

@squint О, хорошо, хорошо поймать! Будет обновлено –

+0

Я обновил фрагменты кода и исправил опечатку и изменил значение If (jstr == "true") на if (jstr == true), и теперь для параметра on_out_status var установлено значение true, однако if (online_status == true) каждый раз проваливается в else. console.log говорит, что он равен true. – user3254596

-1

var x={"city":"New York"}; 
 
JSON.stringify(x); // '{"city":"New York"}'

Это работает

+0

Вопрос в том, что вводить в заблуждение. Не совсем проблема здесь, но будет правильным ответом на вопрос в заголовке. –