Question

Dans une extension côté serveur pour SmartFoxServer (qui utilise Rhino) J'ai eu un morceau de Javascript semblable à ceci:

response["xpos"] = properties.get("xpos");
send(JSON.stringify(response));

erreurs causées. Qu'est-il arrivé? Parce que les propriétés est un Map Java, lorsqu'un numéro est mis, il est autoboxed dans un objet java.lang.Double. Par conséquent, lors de la récupération et le stockage dans response["xpos"], le résultat est un nombre régulier Javascript mais un JavaObject de type java.lang.Double. La fonction JSON.stringify n'a pas été conçu pour gérer cela et il est écrasé.

Je l'ai fixé avec un hack comme ceci:

response["xpos"] = 1.0 * properties.get("xpos");
send(JSON.stringify(response));

Y at-il une meilleure façon?

Était-ce utile?

La solution

Vous pouvez utiliser Number(properties.get("xpos")), comme dans la session de la console interactive suivante:

js> x=java.lang.Double(2)
2.0
js> typeof x
object
js> x instanceof java.lang.Double
true
js> y=Number(x)
2
js> typeof y
number

Voici comment les chaînes sont généralement converties dans Rhino de java.lang.String à des chaînes JavaScript natifs ainsi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top