2016-10-11 5 views
0

J'ai une réponse http, elle contient response.data, il y a beaucoup de nombres entiers longs. Lorsque je tente de créer une ressource blob avec les données d'une manière suivante:JavaScript coupe une longue valeur numérique en utilisant le constructeur blob

var blob = new Blob([ response.data ], { 
    type : response.headers('Content-Type') 
}); 

Les données sont analysées et les nombres sont traités comme des entiers, les 4 derniers chiffres sont excisées (remplacé par 0s) en raison de la façon dont JavaScript traite les nombres. Lorsque j'ajoute une lettre au numéro par ex. "823758273883758237857823758x" il est traité comme une chaîne et traité correctement.

Comment puis-je forcer JS à traiter les nombres comme des chaînes et non comme des nombres entiers sans leur ajouter de lettres inutiles?

EDIT: Exemple de contenu response.data:

"sep =" x " "Time", "Id", "Nom", "1234512345123451234""

Répondre

0

En JSON, la chaîne est toujours venir avec une double citation autour du contenu. Comme "123" sera analysé en tant que chaîne et 123 sera analysé en tant que nombre. Donc, je pense que le problème racine est dans votre source de données. Essayez de convertir le nombre en chaîne lorsque vous générez la chaîne JSON.

+1

* toujours avec guillemet simple/double * Je crois que c'est incorrect. Seules les guillemets sont autorisés. –

+0

Merci de m'avoir signalé. Juste vérifié la norme. Tu as raison. – Ming

0

vous pouvez essayer String (leNombre)

Je ne sais pas où le nombre vient, mais vous pouvez aussi le forcer à être la première chaîne, avant d'envoyer réellement.

J'ai essayé:

JSON.stringify(123) et JSON.stringify(String(123))

et son résultat:

"123"

, respectivement.

+0

puis-je en quelque sorte le transformer en une chaîne après son envoi? (J'ai mis à jour la question, ce n'est pas JSON, c'est juste une chaîne de requête http, a ajouté l'exemple response.data) – Zerg

+0

Je crois que vous pouvez utiliser String (theNumber), si vous le faites, String (theNumber) === theNumber, ce ne sera pas égal à cause du type. L'autre est une chaîne et l'autre est un nombre. – Wreigh

1

// number 
 
a = '823758273883758237857823758'; 
 
console.log(a, JSON.parse(a)); 
 

 
// string 
 
b = '"823758273883758237857823758"'; 
 
console.log(b, JSON.parse(b)); 
 

 
// error 
 
c = '823758273883758237857823758x'; 
 
console.log(c, JSON.parse(c));

Un numéro est pas une chaîne. Une valeur numérique (non entre guillemets) sera analysée comme le numéro JavaScript. Une valeur de chaîne (entre guillemets) sera analysée en tant que chaîne. Une chaîne n'a pas besoin d'un caractère aléatoire pour la garder comme une chaîne; mais un nombre avec un caractère aléatoire ne le transformera pas en une chaîne, mais déclenchera une erreur d'analyse.

Si cela n'est pas satisfaisant, veuillez donner plus de détails, y compris le contenu de response.data, et/ou le code qui le génère.

+0

Exemple de contenu de response.data: "sep =" x "," Time "," Id "," Name "," 1234512345123451234 " s'il s'agit bien d'un entier, existe-t-il un moyen de le convertir en chaîne alors qu'il est sous cette forme? – Zerg

+0

Ceci est JSON invalide. Pour commencer, vous avez un nombre impair de citations. Il est si sévèrement mutilé que je ne peux même pas commencer à deviner ce que vous vouliez dire. Est-ce un tableau? Est-ce une réponse ou cinq? Est-ce que '=' est dans la chaîne, ou est-ce une tentative mal représentée sur un objet JSON (où l'on aurait besoin d'utiliser ':')? – Amadan

+0

Cela pourrait ne pas être json, je suppose que c'est parce que le code (ce n'est pas le mien, et je ne peux pas vraiment le poster ici) le dit, mais clairement ce n'est pas le cas. Ce sont juste les données qui sont transformées en une ressource blob. – Zerg