JSON::ParserError: 757: unexpected token ‘{

corrente hash è

{\"report_name\"=>\"Study/Control: ABIRATERONE ACETATE - 20151413355\", \"left_mue_start_date\"=>\"02-26-2015\", \"left_mue_end_date\"=>\"03-19-2015\", \"right_mue_start_date\"=>\"02-26-2015\", \"right_mue_end_date\"=>\"03-19-2015\", \"report_formulary_id\"=>\",7581\", \"mue\"=>\"true\", \"mue_type\"=>\"study/control\", \"chain_id\"=>\"1\", \"left_mue_formulary_ids\"=>[\"7581\"], \"action\"=>\"create_report\", \"controller\"=>\"informatics\", \"user_id\"=>339}

ora ho bisogno di convertire in buone hash come

{"report_name" => "Study/Control: ABIRATERONE ACETATE - 20151413355"}

quindi sto cercando di ottenere con JSON.analizzare ma ottengo un errore del tipo:

JSON::ParserError: 757: unexpected token at '{

Quindi, se qualcuno sa su che così si prega di aiutare me.
e sto usando Rails 3.2

OriginaleL’autore rajeev | 2015-03-14

4 risposte

  1. 18

    Quello che hai è un hash stampato come Stringa. Per convertirlo in un Hash utilizzare eval.

    ch = "{\"report_name\"=>\"Study/Control: ABIRATERONE ACETATE - 20151413355\", \"left_mue_start_date\"=>\"02-26-2015\", \"left_mue_end_date\"=>\"03-19-2015\", \"right_mue_start_date\"=>\"02-26-2015\", \"right_mue_end_date\"=>\"03-19-2015\", \"report_formulary_id\"=>\",7581\", \"mue\"=>\"true\", \"mue_type\"=>\"study/control\", \"chain_id\"=>\"1\", \"left_mue_formulary_ids\"=>[\"7581\"], \"action\"=>\"create_report\", \"controller\"=>\"informatics\", \"user_id\"=>339}"
    hash = eval(ch)
    # => {"report_name"=>"Study/Control: ABIRATERONE ACETATE - 20151413355", "left_mue_start_date"=>"02-26-2015", "left_mue_end_date"=>"03-19-2015", "right_mue_start_date"=>"02-26-2015", "right_mue_end_date"=>"03-19-2015", "report_formulary_id"=>",7581", "mue"=>"true", "mue_type"=>"study/control", "chain_id"=>"1", "left_mue_formulary_ids"=>["7581"], "action"=>"create_report", "controller"=>"informatics", "user_id"=>339} 

    PS: UNA stringa JSON dovrebbe apparire come segue, il che significa quello che hai non è JSON e, quindi, si ha JSON::ParserError per l’utilizzo di JSON.parse non una stringa JSON :

    "{\"report_name\":\"Study/Control: ABIRATERONE ACETATE - 20151413355\",\"left_mue_start_date\":\"02-26-2015\",\"left_mue_end_date\":\"03-19-2015\",\"right_mue_start_date\":\"02-26-2015\",\"right_mue_end_date\":\"03-19-2015\",\"report_formulary_id\":\",7581\",\"mue\":\"true\",\"mue_type\":\"study/control\",\"chain_id\":\"1\",\"left_mue_formulary_ids\":[\"7581\"],\"action\":\"create_report\",\"controller\":\"informatics\",\"user_id\":339}" 
    Basta essere attenti utilizzando eval perché in grado di iniettare codice dannoso all’interno del sistema, a seconda di dove il vostro hash provengono da
    vero che. eval è sempre rischioso.

    OriginaleL’autore shivam

  2. 4

    Ultima volta che ho avuto questo problema, dal momento che il file json che ho avuto da un API che contiene un BOM

    UTF-8 BOM è una sequenza di byte (EF BB BF)
    Cosa c’è di diverso tra UTF-8 e UTF-8 senza BOM?

    all’inizio della stringa, ma si sa che una parte non visualizzare o leggibili, quando abbiamo ottenuto la stringa di risposta. Cerco di usare Ruby JSON per analizzarlo, ma ho fallito, ho avuto la stessa eccezione con la vostra. solo un promemoria per gli altri, quando si ottiene una risposta Json. A proposito, questo non sarebbe un problema, mentre si sta gestione che in javascript, ma con problemi in Python o Ruby lingue.

    OriginaleL’autore Mathew P. Jones

  3. 4

    Per evitare l’uso di eval si potrebbe utilizzare JSON.parse ch.gsub('=>', ':') in questo modo si otterrà un HASH dal tuo HASH memorizzati come STRING

    OriginaleL’autore Juan Felipe Rodriguez

  4. 0

    Mi sono imbattuto in un problema simile, anche se si è verificato un errore durante l’analisi di \”\”. Questo è per quanto riguarda utilizzando Patto.IO. Ne parlo qui perché questa è la più alta classifica di Google risultato della ricerca per l’errore che ho incontrato. La soluzione nel mio caso è stato quello di modificare il corpo di un POST nella mia applicazione C# in modo che non è stato con una stringa vuota, ma una stringa null. In pratica ho aggiunto questo prima della mia chiamata HTTP.

    if (request.Method == HttpMethod.Post && request.Content!=null && request.Content.GetType()==typeof(StringContent) && request.Content.ReadAsStringAsync().Result == String.Empty)
      request.Content = new StringContent(null);

    OriginaleL’autore Louis Cribbins

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *