Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

252
Views
SyntaxError: token inesperado "en JSON en la posición 0 en stringify

He visto esta pregunta varias veces aquí, pero nunca con el carácter ".

Para aclarar, este no es mi código que está generando el error, esto es lo que obtengo de una API.

Mi primer intento:

Uso https://reqbin.com/ y la solicitud funciona perfectamente ( lo que hice )

Mi segundo intento:

Decido mover esto para que se ejecute mediante programación para usarlo en el desarrollo.

En ios hay una aplicación llamada scriptable que te permite ejecutar javascript

documentos para su objeto de solicitud

yo uso el codigo

 let req = new Request("https://support.readaloud.app/ttstool/createParts"); req.method = "post"; req.headers = {"Content-Type": "application/json" }; var data = '[{"voiceId":"Amazon British English (Brian)","ssml":"<speak version=\"1.0\" xml:lang=\"en-GB\">' + "Hello" + '</speak>"}]'; req.body = JSON.stringify(data); let res = await req.loadString();

Donde res debería responder con ["id"] como reqbin

Lamentablemente no lo hace y vuelve

 SyntaxError: Unexpected token " in JSON at position 0 at JSON.parse (<anonymous>) at createStrictSyntaxError (/home/ec2-user/readaloud/webservices/node_modules/body-parser/lib/types/json.js:160:10) at parse (/home/ec2-user/readaloud/webservices/node_modules/body-parser/lib/types/json.js:83:15) at /home/ec2-user/readaloud/webservices/node_modules/body-parser/lib/read.js:128:18 at AsyncResource.runInAsyncScope (node:async_hooks:201:9) at invokeCallback (/home/ec2-user/readaloud/webservices/node_modules/raw-body/index.js:231:16) at done (/home/ec2-user/readaloud/webservices/node_modules/raw-body/index.js:220:7) at IncomingMessage.onEnd (/home/ec2-user/readaloud/webservices/node_modules/raw-body/index.js:280:7) at IncomingMessage.emit (node:events:538:35) at endReadableNT (node:internal/streams/readable:1345:12)

Si puedes ayudar te lo agradecería mucho.

Gracias

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

El error se debe a que el analizador JSON está muy desactualizado y no es compatible con JSON, donde el tipo de datos de nivel superior es una cadena. (La especificación original para JSON solo permitía objetos y matrices, pero se cambió para permitir cualquier tipo de datos).

Sin embargo, no debería enviar un texto JSON donde el elemento de nivel superior es una cadena en primer lugar.

 var data = '[{"voiceId":"Amazon British English (Brian)","ssml":"<speak version=\"1.0\" xml:lang=\"en-GB\">' + "Hello" + '</speak>"}]';

Aquí está construyendo manualmente una cadena de JSON (aunque tiene errores porque algunas comillas no se escapan correctamente).

 req.body = JSON.stringify(data);

Y luego crea una cadena de JSON que representa la cadena anterior.


No hagas eso. Cree una estructura de datos de JavaScript regular (es decir, una matriz), no una cadena.

Luego, convierta la matriz a JSON con JSON.stringify .

También recomiendo aplicar los mismos principios a la creación de XML (es decir, no mezclar cadenas).


 const doc = document.implementation.createDocument(null, "speak"); const speak = doc.documentElement; speak.setAttribute("version", "1.0"); speak.setAttribute("xml:lang", "en-GB"); speak.appendChild(doc.createTextNode("Hello")); const xml = new XMLSerializer().serializeToString(speak); const data = [{ voiceId: "Amazon British English (Brian)", ssml: xml }]; const json = JSON.stringify(data); console.log(json);

about 4 years ago · Juan Pablo Isaza Report

0

intente establecer la variable sin comillas y arréglela un poco para que quede así

 var data = [{"voiceId":"Amazon British English (Brian)","ssml":"<speak version=\"1.0\" xml:lang=\"en-GB\">Hello</speak>" }];
about 4 years ago · Juan Pablo Isaza Report

0

let req = new Request("https://support.readaloud.app/ttstool/createParts"); req.method = "POST"; req.headers = {"Content-Type": "application/json" }; var data = [ { "voiceId":"Amazon British English (Brian)", "ssml":"<speak version=\"1.0\" xml:lang=\"en-GB\">" + "Hello" + "</speak>" }] req.body = JSON.stringify(data); let res = await req.loadString(); console.log(res);
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!