Parse.comプロジェクトにいくつかのJSONファイルをインポートしていますが、「無効なキー:値のペア」というエラーが引き続き発生します。
予期しない「8」があることを示しています。
JSONの例を次に示します。
}
"Manufacturer":"Manufacturer",
"Model":"THIS IS A STRING",
"Description":"",
"ItemNumber":"Number12345",
"UPC":083456789012,
"Cost":"$0.00",
"DealerPrice":" $0.00 ",
"MSRP":" $0.00 ",
}
0
から"UPC":083456789012,
を削除するか、"UPC":"083456789012",
に変換してJSONを更新すると、有効になります。
JSONは0
で始まる整数を実際に受け入れられないのでしょうか、それとも問題を回避する方法はありますか?
先頭の0は、JavaScriptの8進数を示します。 8進数に8を含めることはできません。したがって、その番号は無効です。さらに、JSONは(公式に)8進数をサポートしていないため、8が含まれていない場合でも、正式にはJSONは無効です。他のパーサーはそれを無効なシーケンスとして認識し、エラーをスローしますが、正確な説明は異なる場合があります。
解決策:数値がある場合は、先頭にゼロを付けて格納しないでください。先行ゼロが必要な値がある場合は、数値としてではなく、文字列として扱います。引用符で囲んで保存します。
この場合、UPC which 12桁の長さが必要です があり、先頭にゼロが含まれている可能性があります。文字列。
ただし、議論の余地があります。それをバーコードとして扱い、先頭の0をその一部として見れば、文字列は理にかなっています。他のタイプのバーコードには、アルファベット文字を含めることもできます。
一方。 A UPCは数字であり、12桁までゼロで左詰めされているという事実は、表示プロパティとして見ることができます。実際に、 EANはUPCのスーパーセットであるため、余分な0、EANコードがあります。
金額がある場合は、€ 7.30
として保存し、7.3
として保存すると、製品コードを数値として保存することもできます。
しかし、その決定はあなた次第です。これらのコードの個人的な好みである文字列を使用することをお勧めします。数字を選択した場合は、0
を削除して機能させる必要があります。
JavaScriptのより複雑な部分の1つは、数値が0
が直後に続かない.
で始まる場合、10進数ではなく8進数を表すことです。
JSONはJavaScriptシンタックスから借用していますが、混乱を招く機能を回避しているため、先頭にゼロを付けた数字を禁止します(その後に.
が続く場合を除きます)。
これが当てはまらなかったとしても、0
と02
は単なる差分表現であるため、2
が解析されたときにまだ数値にあると期待する理由はありません。同じ数字(10進数を強制する場合)。
先行ゼロがデータにとって重要な場合、おそらく数字ではなく文字列があります。
"UPC":"083456789012"
製品コード は識別子であり、数学を行うものではありません。文字列でなければなりません。
UPCは文字列形式である必要があります。将来的には、GS128や文字列ベースの製品識別コードなど、他のタイプのUPCも取得できます。文字列にする列。
正式には、JSONはDecimalIntegerLiteral
生成でJSONNumber
を使用するためです。
JSONNumber ::
-_opt DecimalIntegerLiteral JSONFraction_opt ExponentPart_opt
DecimalIntegerLiteral
は、0
の場合にのみ0
で始まる場合があります。
DecimalIntegerLiteral ::
0
NonZeroDigit DecimalDigits_opt
背後にある理論的根拠はおそらく次のとおりです。
DecimalIntegerLiteral
とHexIntegerLiteral
およびOctalIntegerLiteral
を区別しやすくするため。 OctalIntegerLiteral
そもそも。この作品を見る:
HexIntegerLiteral ::
0x HexDigit
0X HexDigit
HexIntegerLiteral HexDigit
...
OctalIntegerLiteral ::
0 OctalDigit
OctalIntegerLiteral OctalDigit
JavaScriptで0
で始まる整数は、10進数(10進数)ではなく、整数の8進数(8進数)の値と見なされます。例えば:
var a = 065; //Octal Value
var b = 53; //Decimal Value
a == b; //true
JSONで番号を送信する最も簡単な方法は、文字列として番号を送信することだと思います。