Convertendo uma Cadeia de Caracteres em Objeto JSON

148

Como você faz o JS pensar que uma string é JSON?

Eu tenho uma função que só funciona se o objeto JSON for passado para ele. Se eu passar uma string para ele, com o mesmo formato que JSON, ele não funcionará. Então, eu quero fazer essa função pensar que a string passada para ela é um JSON. A sequência está realmente no formato JSON.

Eu também tentei o seguinte. Eu inseri a string através do Ajax, com o parâmetro "handle as" como "JSON" e, em seguida, quando passei o resultado para a função que funciona.

Então deduzi que o problema não está na string. Como faço para converter essa string em JSON? Se eu receber a mesma string através da solicitação ajax e depois passá-la para a função funciona, enquanto a passagem direta não funciona.

A sequência é a seguinte:

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

and closing braces..
Zer0
fonte
2
Seu título é enganoso. Com base no conteúdo da sua pergunta, prefiro dizer que você deseja converter uma string que contém JSON em um objeto / matriz JavaScript.
Felix Kling
OK, eu resolvi. Havia um \ n na string. Agora só é necessário descobrir como usar o JSON.parse.
Zer0
Ok, eu consertei. Goto jsonlint.com e colocar a sua corda lá. Se estiver correto, você poderá usar o JSONParse para obter o mesmo.
Zer0
No caso de alguém ler isso, o título deve estar "convertendo uma string JSON em um objeto"
Chris G

Respostas:

353
var obj = JSON.parse(string);

Onde stringestá sua string json.

Kshitij
fonte
Isto não está a funcionar. Está lançando um erro "SyntaxError: JSON.parse: caractere inesperado". Não há nada de errado com a string, pois quando eu recebo a mesma string através de uma solicitação ajax e a manipulo como "JSON", não há problema.
Zer0
envie sua string JSON acutal
Kshitij
{"data": [{id ": - você está faltando aspas duplas aqui, ou seja, iniciando aspas duplas de id
Kshitij
2
Quando o recebo pelo Ajax, ele funciona, pois lida com a resposta como JSON. Então eu acho que eu tenho que converter isso em um objeto JSON ..
Zer0
2
Eu acabei indo para jsonlint.com, e certificando-se o meu JSON é certo
Zer0
26

Você pode usar o JSON.parse()para isso.

Veja os documentos no MDN

Exemplo:

var myObj = JSON.parse('{"p": 5}');
console.log(myObj);
Sarfraz
fonte
1
Isto não está a funcionar. Está lançando um erro "SyntaxError: JSON.parse: caractere inesperado". Não há nada de errado com a string, pois quando eu recebo a mesma string através de uma solicitação ajax e a manipulo como "JSON", não há problema.
Zer0
2
@ Zer0: Você deve atualizar sua pergunta com a forma como a está testando, juntamente com sua string json.
21412 Sarfraz
4
@ Zer0: Só podemos responder da melhor maneira possível. Você diz que tem uma string JSON, nós respondemos de acordo. Parece que sua string é diferente. Se você a publicar, podemos responder levando isso em consideração. Se você fizer uma pergunta sobre codificação, código / dados é indispensável.
Felix Kling
7

Eu tive o mesmo problema com uma string semelhante à sua

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

O problema aqui é a estrutura da string. O analisador json não estava reconhecendo que precisava criar 2 objetos nesse caso. Então, o que eu fiz é meio bobo, eu apenas reestruturei minha string e adicionei o []com isso que o analisador reconheceu

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

Espero que ajude,

Se alguém tiver uma abordagem mais elegante, compartilhe.

Abraão
fonte
No seu código acima, você construiu myStringincorretamente. Não é uma sequência e está JSON formatado incorretamente. Sua segunda linha se tornaria redundante. Aqui está o que deveria ser: var myString = '[{"id":1,"field1":"someField"},{"id":2,"field1":"someOtherField"}]' eu sei que esse post é bastante antigo, mas achei que acrescentaria alguma clareza caso alguém o encontre.
James Eberhardt
Eu resolvi meu problema usando $.parseJSONonde JSON.parsenão estava funcionando e jogando um erroJSON.parse is not a function
brasofilo
3

converta a string em HashMap usando o Mapeador de Objetos ...

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

Internamente, o Mapa se comportará como Objeto JSON

Sugan V
fonte
2
var Data=[{"id": "name2", "label": "Quantity"}]

Passe a variável string para a análise Json:

Objdata= Json.parse(Data);
Ankita_systematix
fonte
No seu exemplo, Datajá é um objeto, portanto, não há necessidade de analisá-lo. Você precisaria de algumas aspas ao redor de todos os seus dados para torná-lo uma string.
James Eberhardt
2

Basta usar a evalfunção.

var myJson = eval(theJsibStr);
Siyavash Hamdi
fonte
eval é mau, ter muito cuidado com a segurança com esta abordagem
dparker
0

JSON.parse() função fará.

ou

Usando Jquery,

var obj = jQuery.parseJSON( '{ "name": "Vinod" }' );
alert( obj.name === "Vinod" );
Vinod Selvin
fonte
0

Vamos considerar que você tem string como

exemplo: "nome: lucy, idade: 21, sexo: feminino"

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

`

Shishir
fonte