2014-11-12 19 views
7

Với tài liệu JSONLà số thập phân không có số 0 đứng đầu có hợp lệ không?

{"percentageAmount": .01} 

Chạy nó bằng cách JSONLint.com kết quả trong các lỗi:

Parse error on line 2: 
..."percentageAmount": .01} 
-----------------------^ 
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '[' 

Mặt khác, đây là hợp lệ:

{"percentageAmount": 0.01} 

Mã này là được phân tích cú pháp chính xác nếu được gán cho một biến như một chữ JavaScript, nhưng tất nhiên có rất nhiều thứ được chấp nhận cho các biến JavaScript không phải là thông số JSON.

Tại sao điều này chống lại thông số kỹ thuật JSON?

+3

Nhìn vào 'sản xuất number' tại http://www.json.org/ – Barmar

+0

từ JSON là viết tắt của JavaScript Object Notation vì vậy nó là một tập hợp con của javascript nó nên xác nhận nó bình thường. Có lẽ vì json được sử dụng để exhange dữ liệu thông qua phía máy chủ (php, asp) trong đó 0,01 giá trị không hợp lệ – albanx

+1

Nói chung, JSON là một tập hợp con đơn giản hóa nhiều ký hiệu chữ viết Javascript. – Barmar

Trả lời

7

Are decimals without leading zeros valid JSON?

Từ the specification:

number = [ minus ] int [ frac ] [ exp ] 

    decimal-point = %x2E  ; . 

    digit1-9 = %x31-39   ; 1-9 

    e = %x65/%x45   ; e E 

    exp = e [ minus/plus ] 1*DIGIT 

    frac = decimal-point 1*DIGIT 

    int = zero/(digit1-9 *DIGIT) 

    minus = %x2D    ; - 

    plus = %x2B    ; + 

    zero = %x30    ; 0 

Phần duy nhất của một số đó là bắt buộc là int được định nghĩa là zero hoặc 1-9 Tiếp theo bất kỳ số lượng chữ số.

Vì vậy, JSON Lint là chính xác.

Why is this against JSON spec?

Theo như tôi biết, lý do của tác giả xác định theo cách đó không được ghi chép ở bất kỳ đâu.

10

Không.

Theo railroad diagram for numbers at JSON.org, số với các giá trị phân đoạn phải có chữ số trước dấu thập phân:

Diagram showing that numbers with fraction parts must have a digit before the decimal point.

+1

Tôi thích các biểu đồ này. Điều này cung cấp câu trả lời. – gfullam

+0

Nếu tôi đọc chính xác, số 0 đứng đầu theo sau là một chữ số cũng không hợp lệ: nghĩa là 000.1234 và 0123.45 không hợp lệ. Chính xác? Không phải là tôi sẽ cố tình mã đầu vào theo cách đó, nhưng spec của họ là xấu. – user949300

+1

Cũng không phải những con số đó là hợp lệ trong JavaScript (SyntaxError) vì vậy nó có vẻ hợp lý với tôi. Tuy nhiên, – maerics

Các vấn đề liên quan