2015-06-03 14 views
34

Tại sao:Tại sao JSON.parse không thành công với chuỗi rỗng?

JSON.parse(''); 

sẽ xuất hiện lỗi?

Uncaught SyntaxError: Unexpected end of input 

Sẽ không hợp lý hơn nếu nó chỉ trả lại null?

+0

yeah nó có vẻ như một lỗi trong thiết kế của hàm 'parse'. bạn có thể bọc nó trong 'try catch' ... nhưng đó là xấu xí :) – vsync

+3

Nó tạo ra một lỗi khi bất cứ thứ gì không hợp lệ JSON được chuyển vào, giống như một chuỗi rỗng. Nó thực sự không phải là không phổ biến để tạo ra một bí danh được bọc trong một try/catch để tránh các lỗi như vậy. – adeneo

+0

Một chuỗi rỗng không phải là một json hợp lệ, sau đó nó không thành công. Đừng nghĩ rằng nó phân tán nhiều phân tích hơn :) –

Trả lời

58

Vì chuỗi trống không hợp lệ nên không chính xác cho JSON.parse('') để trả lại null"null" là JSON hợp lệ. ví dụ.

JSON.parse("null"); 

trả về null. Nó sẽ là một sai lầm cho JSON không hợp lệ cũng được phân tích cú pháp thành null.

Trong khi chuỗi rỗng không hợp lệ thì hai dấu ngoặc kép là JSON hợp lệ. Đây là một dấu hiệu đặc biệt quan trọng.

Điều gì là để nói một chuỗi có chứa hai dấu ngoặc kép không giống như một chuỗi rỗng.

JSON.parse('""'); 

sẽ phân tích cú pháp chính xác, (trả về một chuỗi trống). Nhưng

JSON.parse(''); 

sẽ không.

trị chuỗi JSON tối thiểu là

Đối tượng trống '{}'

Mảng rỗng '[]'

Chuỗi rỗng '""'

Một số ví dụ'123.4'

Giá trị boolean true 'true'

Giá trị boolean false 'false'

Các giá trị null 'null'

+0

OK, có ý nghĩa, cảm ơn! – Richard

+0

JSON.parse ('""') không hoạt động Tôi gặp lỗi: JSON :: ParserError: 757: token không mong muốn tại '""' – Sam

+0

Tôi vừa chạy 'JSON.parse ('" "') ; 'trong bảng điều khiển Chrome và nó hoạt động như mong đợi. – bhspencer

1

JSON.parse dự kiến ​​ký hiệu hợp lệ bên trong một chuỗi, cho dù đó là đối tượng {}, mảng [], chuỗi "" hoặc loại số (int, float, double).

Nếu có khả năng phân tích cú pháp là chuỗi trống thì nhà phát triển nên kiểm tra.

Nếu nó được xây dựng vào chức năng, nó sẽ bổ sung thêm chu kỳ, vì các chức năng được xây dựng dự kiến ​​sẽ cực kỳ hiệu quả, nên không thể lập trình chúng cho trường hợp cuộc đua.

+1

Điều này không chính xác. Hãy thử phân tích chuỗi có chứa hai dấu ngoặc kép JSON.parse ('""'); – bhspencer

+2

Json không phải là ngôn ngữ đánh dấu, sẽ chính xác hơn khi nói JSON.parse mong đợi một chuỗi phù hợp với đặc điểm kỹ thuật. – bhspencer

+2

JSON không hỗ trợ kiểu nguyên thủy int. Nó được gọi là "số" và hỗ trợ các giá trị thực không chỉ ints. – bhspencer

-2

Đối với một chuỗi JSON giá trị ít nhất một "{}" là bắt buộc. Xem thêm tại số http://json.org/

+1

Điều này không chính xác. Một chuỗi chỉ chứa hai trích dẫn là JSON hợp lệ. – bhspencer

8

Sử dụng try-catch để tránh nó:

var result = null; 
try { 
    // if jQuery 
    result = $.parseJSON(JSONstring); 
    // if plain js 
    result = JSON.parse(JSONstring); 
} 
catch(e) { 
    // forget about it :) 
} 
Các vấn đề liên quan