2016-12-20 3 views
5

У меня есть метод javascript. Я пытаюсь получить идентификатор из параметра данных.Как преобразовать строку в json-объект в javascript

data(spark, data){ 
    console.log('receive ', data) 
    console.log(data.id) 
    } 

первая выходная линия receive {id:1}

, но вторая выходная линия undefined

тогда я пытался ниже метода, чтобы преобразовать строку JSON объекта:

data(spark, data){ 
    console.log('receive ', data) 
    console.log(JSON.parse(JSON.stringify(data)).id) 

Я до сих пор получил тот же результат. Почему я не могу получить идентификатор из входного параметра?

EDIT1

Я изменил имя параметра будет отличаться с именем функции, как показано ниже:

data(spark, d){ 
    console.log('receive ', d) 
    console.log(JSON.parse(JSON.stringify(d)).id) 
} 

, но я до сих пор получил тот же результат. .

+3

Обратите внимание, что 'id' должен быть заключен в двойные кавычки, тогда вы можете использовать' var json = JSON.parse (data); console.log (JSON.id); ' – Tushar

+0

, если идентификатор не заключен в двойную кавычку, как преобразовать его в объект json? –

+1

Почему вы хотите, чтобы имя функции и имя переменной совпадали? – randominstanceOfLivingThing

ответ

2

Примечание: Сильное слово предостережения. Просто проверьте, работает ли это, и это работает. Не используйте его при непредвиденных обстоятельствах. Очень опасно!

Одна сумасшедшая вещь, вы забыли function ключевое слово, в-перед именем функции.

Попытка с eval() для этого:

function data(spark, d) { 
 
    // console.log('receive ', d); 
 
    eval("d = " + d); 
 
    console.log(d.id); 
 
} 
 
data("", "{id: 5}");

+0

Моя функция определена внутри класса (es6), поэтому ключевое слово функции отсутствует. Я пробовал ваш подход, он работает. но это опасно. Есть ли другой способ сделать это? –

+0

С вашей текущей реализацией я не уверен, есть ли правильный способ. –

+0

Downvoter может сказать мне причину ... ':)' –

-2

Eval ("(" + данные + ")") идентификатор все, что требуется

function data(spark, data) { 
 
    alert(eval("(" + data + ")").id); 
 
} 
 

 
data("", "{id:3}");

+0

Я попытался, но получил тот же результат –

+0

Это будет работать, если данные '{" id ": 1}', но данные '{id: 1}' поэтому JSON.parse выдаст ошибку – slebetman

+0

@slebetman попробует, это будет work – theliberalsurfer

0

Четыре ответы:

  1. Есть сервер ниспослать правильно сформированный JSON (двойные кавычки вокруг ключевых имен) , Это предпочтительное решение.

  2. Используйте расслабленный парсер JSON. Вы можете искать и находить такие вещи на npm.

  3. eval.

  4. ли некоторые строки манипуляции, чтобы вложить в id в двойных кавычках, так что вы можете JSON.parse его или извлечь 1, или все, что вы хотите сделать. Это наименее предпочтительное решение.

+0

** 1. ** Что делать, если сервер не находится под контролем? ** 2. ** НПМ? Шутки в сторону? –

+0

Я не рекомендую использовать расслабленный/грязный парсер, но я думаю, что это лучше, чем eval. В чем проблема с npm? Куда бы вы еще искали? –

+0

Я думал, что NPM предназначен только для узла? Я ошибаюсь? –

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