Вопрос по ajax, javascript, json – Преобразование строки в объект JSON

133

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

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

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

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

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

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

and closing braces..
ОК, я решил это. В строке был \ n Теперь осталось только выяснить, как использовать JSON.parse с этим. Zer0
возможный дубликатSafely turning a JSON string into an object ManseUK
Ваш заголовок вводит в заблуждение. Основываясь на содержании вашего вопроса, я бы скорее сказал, что вы хотите преобразовать строку, содержащую JSON, в объект / массив JavaScript. Felix Kling
Хорошо, я исправил это. Идти кjsonlint.com и положи туда свою строку. Если он говорит, что это правильно, то вы можете использовать JSONParse для достижения того же. Zer0

Ваш Ответ

8   ответов
328
var obj = JSON.parse(string);

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

В итоге я пошел на jsonlint.com и убедился, что мой Json прав Zer0
пожалуйста опубликуйте свою точную строку JSON
Это не работает. Выдает ошибку & quot; SyntaxError: JSON.parse: неожиданный символ & quot; , В этой строке нет ничего плохого, поскольку, когда я получаю ту же строку через запрос ajax и обрабатываю ее как «JSON», никаких проблем не возникает. Zer0
Когда я получаю его через Ajax, он работает так же, как и тогда, обрабатывает ответ как JSON. Так что я думаю, что должен преобразовать это в объект JSON .. Zer0
Опубликовано. Проверьте основной пост .. Zer0
2
var Data=[{"id": "name2", "label": "Quantity"}]

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

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

JSON.parse() для этого.

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

Example:

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

Просто использоватьeval функция.

var myJson = eval(theJsibStr);
6
var obj = jQuery.parseJSON('{"name":"John"}');
alert( obj.name === "John" );

http://api.jquery.com/jQuery.parseJSON/

0

пример :"name:lucy,age:21,gender:female"

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);

`

0

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

или же

Используя Jquery,

var obj = jQuery.parseJSON( '{ "name": "Vinod" }' );
alert( obj.name === "Vinod" );
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)

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

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

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

Похожие вопросы