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"]
]

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.


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;

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!


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.


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.


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>

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


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

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>

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!


-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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.