símbolo de sintaxe não detectado token inesperado U JSON

294

Eu recebo esse erro "token inesperado de sintaxe não detectado U" quando executo minha página no chrome. E no firefox eu recebo "JSON.parse: caráter inesperado". Estou retornando os dados json de um arquivo php e a string json retornada é válida. Eu verifiquei com http://jsonlint.com/ . Qualquer ajuda seria apreciada ... Obrigado.

Aqui está a string JSON retornada

[
    ["1","Pan Africa Market","\"1521 1st Ave, Seattle, WA\"","47.608941","-122.340145","restaurant"],
    ["2","The Melting Pot","14 Mercer St, Seattle, WA","47.624562","-122.356442","restaurant"],
    ["3","Ipanema Grill","1225 1st Ave, Seattle, WA","47.606366","-122.337656","restaurant"],
    ["4","Sake House","230 1st Ave, Seattle, WA","47.612825","-122.34567","bar"],
    ["5","Crab Pot","1301 Alaskan Way, Seattle, WA","47.605961","-122.34036","restaurant"],
    ["6","Mexican Kitchen","2234 2nd Ave, Seattle,WA","47.613975","-122.345467","bar"],
    ["7","Wingdome","1416 E Olive Way, Seattle, WA","47.617215","-122.326584","bar"],
    ["8","Piroshky Piroshky","1908 Pike pl, Seattle, WA","47.610127","-122.342838","restaurant"]
]
kinath_ru
fonte
Você pode postar o JSON? Quando recebo esse erro, ele normalmente identifica que há uma sequência não terminada - indica que está na letra 'U' no JSON.
Kyle Burton
Pode haver algum problema estranho com \"a saída.
Felix Kling
Esse JSON analisa bem. Você deve tentar descobrir em que seu código está realmente se engasgando.
Nneonneo 23/10/12

Respostas:

647

Esse erro é normalmente visto quando o valor atribuído JSON.parseé realmente undefined. Portanto, eu verificaria o código que está tentando analisar isso - provavelmente você não está analisando a string real mostrada aqui.

Sean Kinsey
fonte
27
Também pode ser "undefined"como uma sequência em vez do literal undefined. Passei apenas 30 minutos descobrindo isso.
ug_
13
@ ns47731 Na verdade, é o mesmo. A razão pela qual um indefinido real se torna ué que ele undefinedé coagido em uma sequência (porque uma sequência é o que o JSON.parse espera).
Sean Kinsey
10
Ugh, estava enviando uma solicitação assíncrona e imediatamente tentando analisar o retorno indefinido. Nojo de mim mesmo, obrigado.
Chris Trudeau
7
Esse erro também seria lançado através de um UTF-8 {"no início da string json
metamagikum
1
Meu erro foi Unexpected token N in JSON at position...eo problema foi um doublevalor:NaN
Jaider
14

Eu estava recebendo essa mensagem durante a validação (no projeto MVC). Para mim, a adição do elemento ValidationMessageFor corrigiu o problema.

Para ser mais preciso, a linha número 43 em jquery.validate.unobtrusive.js causou o problema:

  replace = $.parseJSON(container.attr("data-valmsg-replace")) !== false;
user1412699
fonte
Isso me colocou no caminho certo; no meu caso, eu estava fazendo $("form :input").valid();para acionar a validação. Mas, aparentemente, houve um erro em um campo oculto sem um ValidationMessageFor. Corrigido alterando para$("form :input:visible").valid();
Trax72
7

O parâmetro para o JSON.parse pode não estar retornando nada (ou seja, o valor fornecido para o JSON.parse é undefined)!

Aconteceu comigo enquanto eu estava analisando o código de solidez Compilado de um arquivo xyz.sol.

import web3 from './web3';
import xyz from './build/xyz.json';

const i = new web3.eth.Contract(
  JSON.parse(xyz.interface),
  '0x99Fd6eFd4257645a34093E657f69150FEFf7CdF5'
);

export default i;

que foi escrito incorretamente como

JSON.parse(xyz.intereface)

que não estava retornando nada!

Kartik ganiga
fonte
5

O caso mais comum desse erro acontecer é usar o modelo que está gerando o controle e depois mudar a maneira ide / ou nameestá sendo gerado pela 'substituição' do modelo padrão por algo como

@Html.TextBoxFor(m => m, new {Name = ViewData["Name"], id = ViewData["UniqueId"]} )

e depois esquecendo de mudar ValidationMessageForpara

@Html.ValidationMessageFor(m => m, null, new { data_valmsg_for = ViewData["Name"] })    

Espero que isso economize algum tempo.

Matas Vaitkevicius
fonte
3

Ocorreu esse erro ao executar uma condição de localização em um JSONArray dentro de um loop for. O problema que enfrentei foi o resultado de um dos valores no loop for retornando nulo. Por isso, quando tentei acessar uma propriedade em que ela falhou.

Portanto, se você estiver fazendo alguma coisa no JSONArrays em que não tenha certeza da fonte de dados e de sua integridade, acho um bom hábito lidar com exceções nulas e indefinidas nesse caso.

Corrigi-o verificando nulo no valor retornado de localização no JSONArray e manipulando exceções adequadamente.

Achei que isso poderia ajudar.

SD1985
fonte
1

No meu caso, ele estava tentando chamar JSON.parse () em uma variável AJAX antes que o XHRResponse voltasse. POR EXEMPLO:

var response = $.get(URL that returns a valid JSON string);
var data = JSON.parse(response.responseText);

Substituí isso por um exemplo fora do site jQuery por $ .get :

<script type="text/javascript"> 
    var jqxhr = $.get( "https://jira.atlassian.com/rest/api/2/project", function() {
          alert( "success" );
        })
          .done(function() {
//insert code to assign the projects from Jira to a div.
                jqxhr = jqxhr.responseJSON;
                console.log(jqxhr);
                var div = document.getElementById("products");
                for (i = 0; i < jqxhr.length; i++) {
                    console.log(jqxhr[i].name);
                    div.innerHTML += "<b>Product: " + jqxhr[i].name + "</b><BR/>Key: " + jqxhr[i].key + "<BR/>";
                }
                console.log(div);
            alert( "second success" );
          })
          .fail(function() {
            alert( "error" );
          })
          .always(function() {
            alert( "finished" );
          });

        // Perform other work here ...

        // Set another completion function for the request above
        jqxhr.always(function() {
          alert( "second finished" );
        });
</script>
delliottg
fonte
1

Apenas no caso de você não entender

por exemplo, é que vamos dizer que eu tenho um JSON STRING ... AINDA NÃO UM OBJETO JSON OU ARRAY.

por isso, se em javascript u analisar a string como

var body={
  "id": 1,
  "deleted_at": null,
  "open_order": {
    "id": 16,
    "status": "open"}

var jsonBody = JSON.parse(body.open_order); //HERE THE ERROR NOW APPEARS BECAUSE THE STRING IS NOT A JSON OBJECT YET!!!! 
//TODO SO
var jsonBody=JSON.parse(body)//PASS THE BODY FIRST THEN LATER USE THE jsonBody to get the open_order

var OpenOrder=jsonBody.open_order;

Ótimas respostas acima

Boa vida
fonte
1

Esta resposta é para as pessoas que estão enfrentando esse erro ao trabalhar com o Upload de arquivos .

Estávamos usando middleware para criptografia baseada em token - descriptografia e encontramos o mesmo erro.

A seguir, nosso código no arquivo de rota:

  router.route("/uploadVideoMessage")
  .post(
    middleware.checkToken,
    upload.single("video_file"),
    videoMessageController.uploadVideoMessage
  );

aqui estávamos chamando o middleware antes da função de upload e isso estava causando o erro. Então, quando mudamos para isso, funcionou.

router.route("/uploadVideoMessage")
  .post(
    upload.single("video_file"),
    middleware.checkToken,
    videoMessageController.uploadVideoMessage
  );
Kushal Parikh
fonte
0

Esta não é uma tarefa difícil. Esse problema também ocorre no meu site, você deve alterar os arquivos js com a melhor ordem. Porque no local em que você está usando a Análise JSON, desta vez, seus arquivos JS não são carregados. EXEMPLO #

<script type="text/javaScript">
...........SOME CODE.............
</script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>

mudar para

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script type="text/javaScript">
...........SOME CODE.............
</script>
mk Mughal
fonte
0

Bem, para todos que realmente não conseguem encontrar o erro em nenhum lugar do seu código, nem "indefinido como diz no armazenamento local nem nulo" .. basta apenas comentar seu código e escrever outro que realmente remova o item no armazenamento local. .depois disso, você pode comentar ou excluir o código atual e redefinir novamente o anterior simplesmente descomentando-o (se você não excluir o t ... se o fez, poderá escrevê-lo novamente :))

LocalStorage.setItem('Previous' , "removeprevious");  


LocalStorage.removeItem('Previous');   
 Console.log(LocalStorage.getItem('Previous'));

O console mostrará nulo e que .. redefina seu código novamente se não funcionar, cara! Você tem erros.

Desculpe pelo meu Inglês!

Nancy256
fonte
-3

Eu estava recebendo esse erro, quando eu estava usando a mesma variável para json string e analisado json:

var json = '{"1":{"url":"somesite1","poster":"1.png","title":"site title"},"2":{"url":"somesite2","poster":"2.jpg","title":"site 2 title"}}'

function usingjson(){
    var json = JSON.parse(json);
}

Alterei a função para:

function usingjson(){
    var j = JSON.parse(json);
}

Agora esse erro foi embora.

user2605603
fonte