Преобразование строки в объект JSON

149

Как вы заставляете JS думать, что строка - это JSON?

У меня есть функция, которая работает, только если объект JSON передается ему. Если я передаю ей строку с тем же форматом, что и в JSON, она не работает. Поэтому я хочу заставить эту функцию думать, что переданная ей строка является JSON. Строка действительно в формате JSON.

Я также попробовал следующее. Я ввел строку через Ajax, с параметром handle as как JSON, а затем, когда передал результат в функцию, она работает.

Так что я вывел проблему не со строкой. Как мне преобразовать эту строку в JSON? Если я получаю ту же строку через запрос ajax, а затем передаю ее в функцию, то работает, а прямая передача не работает.

Строка выглядит следующим образом:

  {
     "data": [
   {
  "id": "id1",
      "fields": [
        {
          "id": "name1",
          "label": "joker",
          "unit": "year"
        },
         {"id": "name2", "label": "Quantity"},
    ],
      "rows": [    data here....

and closing braces..
Zer0
источник
2
Ваш заголовок вводит в заблуждение. Исходя из содержания вашего вопроса, я бы скорее сказал, что вы хотите преобразовать строку, содержащую JSON, в объект / массив JavaScript.
Феликс Клинг
ОК, я решил это. В строке был \ n Теперь осталось только выяснить, как использовать JSON.parse с этим.
Zer0
Хорошо, я исправил это. Goto jsonlint.com и поставить строку там. Если он говорит, что это правильно, то вы можете использовать JSONParse для достижения того же.
Zer0
В случае, если кто-то прочитает это, предполагается, что заголовок «преобразовывает строку JSON в объект»
Крис Г.

Ответы:

354
var obj = JSON.parse(string);

Где stringваша строка JSON.

Kshitij
источник
Это не работает. Выдает ошибку «SyntaxError: JSON.parse: неожиданный символ». В строке нет ничего плохого, так как когда я получаю ту же строку через запрос ajax и обрабатываю ее как «JSON», никаких проблем не возникает.
Zer0
пожалуйста, опубликуйте свою точную строку JSON
Kshitij
{"data": [{id ": - здесь вам не хватает двойной кавычки, то есть начинается двойная кавычка id
Kshitij
2
Когда я получаю его через Ajax, он работает как тогда, и обрабатывает ответ как JSON. Так что я думаю, что должен преобразовать это в объект JSON ..
Zer0
2
Я закончил тем, что пошел в jsonlint.com, и удостоверился, что мой Json прав
Zer0
26

Вы можете использовать JSON.parse()для этого.

Посмотреть документы на MDN

Пример:

var myObj = JSON.parse('{"p": 5}');
console.log(myObj);
Sarfraz
источник
1
Это не работает. Выдает ошибку «SyntaxError: JSON.parse: неожиданный символ». В строке нет ничего плохого, так как когда я получаю ту же строку через запрос ajax и обрабатываю ее как «JSON», никаких проблем не возникает.
Zer0
2
@ Zer0: Вы должны обновить свой вопрос, указав, как вы пытаетесь решить его вместе со строкой json.
Сарфраз
4
@ Zer0: Мы можем ответить только в меру наших знаний. Вы говорите, что у вас есть строка JSON, мы отвечаем соответственно. Кажется, ваша строка другая, если вы опубликуете ее, мы можем ответить, учитывая это. Если вы задаете вопрос о кодировании, то код / ​​данные незаменимы.
Феликс Клинг
7

У меня была такая же проблема с похожей строкой, как у вас

{id:1,field1:"someField"},{id:2,field1:"someOtherField"}

Проблема здесь заключается в структуре строки. Парсер json не распознал, что ему нужно создать 2 объекта в этом случае. Так что то, что я сделал, немного глупо, я просто перестроил свою строку и добавил []с этим распознанный парсер

var myString = {id:1,field1:"someField"},{id:2,field1:"someOtherField"}
myString = '[' + myString +']'
var json = $.parseJSON(myString)

Надеюсь, поможет,

Если у кого-то есть более элегантный подход, пожалуйста, поделитесь.

Авраам
источник
В приведенном выше коде вы создали myStringнеправильно. Это не строка и неправильно отформатированный JSON. Ваша вторая строка станет избыточной. Вот что должно быть: var myString = '[{"id":1,"field1":"someField"},{"id":2,"field1":"someOtherField"}]' я знаю, что это довольно старый пост, но я подумал, что бы добавить ясности на случай, если кто-нибудь найдет его.
Джеймс Эберхардт
Я решил свою проблему, используя, $.parseJSONгде JSON.parseне работал и JSON.parse is not a function
выдав
3

преобразовать строку в HashMap, используя Object Mapper ...

new ObjectMapper().readValue(string, Map.class);

Внутренне карта будет вести себя как объект JSON

Суган V
источник
2
var Data=[{"id": "name2", "label": "Quantity"}]

Передайте строковую переменную в Json parse:

Objdata= Json.parse(Data);
Ankita_systematix
источник
В вашем примере Dataэто уже объект, поэтому не нужно будет его анализировать. Вам понадобятся некоторые кавычки, окружающие все ваши данные, чтобы сделать их строкой.
Джеймс Эберхардт
2

Просто используйте eval функцию.

var myJson = eval(theJsibStr);
Сияваш Хамди
источник
eval - зло, будьте очень осторожны с безопасностью при таком подходе
dparker
0

JSON.parse() Функция будет делать.

или

Используя Jquery,

var obj = jQuery.parseJSON( '{ "name": "Vinod" }' );
alert( obj.name === "Vinod" );
Винод Сельвин
источник
0

Давайте рассмотрим, у вас есть строка как

Например: "имя: Люси, возраст: 21, пол: женщина"

function getJsonData(query){
    let arrayOfKeyValues = query.split(',');
    let modifiedArray =  new Array();
    console.log(arrayOfKeyValues);
    for(let i=0;i< arrayOfKeyValues.length;i++){
        let arrayValues = arrayOfKeyValues[i].split(':');
        let arrayString ='"'+arrayValues[0]+'"'+':'+'"'+arrayValues[1]+'"';
        modifiedArray.push(arrayString);
    }
    let jsonDataString = '{'+modifiedArray.toString()+'}';
    let jsonData = JSON.parse(jsonDataString);
    console.log(jsonData);
    console.log(typeof jsonData);
    return jsonData;
}

let query = "name:lucy,age:21,gender:female";
let response = getJsonData(query);
console.log(response);

`

Шишир
источник