Question

En PHP, vous pouvez utiliser json_encode pour coder un objet comme une chaîne JSON.

$string = json_encode($some_object);

Cependant, PHP a la flopée standard types de données qui ne sont pas des objets considérés (ints, cordes, etc.) Si vous passez une chaîne à json_encode, retourne une chaîne qui contient une instruction javascript qui pourrait être utilisé pour définir la chaîne.

Dans un phrasé moins gênant, ce

echo json_encode("Hello 
world, please don't " . '"' . "misuse quote's for emphasis " .  "or possessive apostrophes' ");

est sortie cette (une chaîne prêt javascript)

"Hello \n\tworld, please don't \"misuse quote'sor possessive apostrophes' "

Est-ce une partie du comportement de la spécification JSON? C'est, ne définit JSON ou recommander comment une mise en œuvre devrait gérer la conversion des indigènes, non-objet, types de données? Ou même avoir une opinion sur la conversion du tout? Ma lecture de la RFC laissâmes, comme ambigu, mais je suis la merde à l'interprétation de ces choses.

Je demande parce que je suis intéressé par la probabilité de ce comportement disparaître à partir d'une version future de la fonction. à savoir si elle est codifiées dans un endroit de spécification, il est moins susceptible de disparaître que si elle était un hors quelqu'un a pensé à ajouter au cours du développement.

Était-ce utile?

La solution

JSON ne se soucie pas de types natifs du tout. Il appartient au développeur de la bibliothèque JSON ou de la fonctionnalité à la façon dont l'JSON est traduit à et de types que le langage de programmation peut utiliser / comprendre.

Autres conseils

Vous avez raison alan, le RFC ne suffit pas claire sur cette question.

D'une part, le lien vers la RFC que vous fournissez dit au deuxième paragraphe de l'introduction:

JSON peut représenter quatre types primitifs (chaînes de caractères, des chiffres, des booléens, et nulles) et deux types structurés (objets et les tableaux).

Mais d'autre part lorsque vous continuez à le paragraphe qui parle de la grammaire JSON réelle, il dit:

Un texte JSON est un objet sérialisé ou un tableau.
JSON-text = objet / tableau

basé sur la grammaire, vous pouvez dire que 'a string' ne se qualifie pas comme JSON texte valide.

Personnellement, je préférerais voir la grammaire « fixe » de dire JSON-text = value rendant ainsi l'une des false / null / true / object / array / number / string deviennent valides JSON texte.

Si vous voulez être stricte pour l'instant, j'aller avec la sémantique de la grammaire.

Je vais envoyer Douglas Crockford un lien vers cette question peut-être qu'il peut ajouter des informations utiles.

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