Có phải là thực tế xấu khi sử dụng dấu gạch nối trong các khóa JSON?


12

Tôi thấy rất nhiều câu hỏi xoay quanh việc truy cập các khóa JSON sử dụng dấu gạch nối (trường hợp kebab), nhưng bây giờ tôi thấy mình băn khoăn không nên chỉ sử dụng camelCase hoặc sn_case trong các khóa của mình. Tôi biết các dấu gạch nối cũng có thể tạo ra các ánh xạ phức tạp khi được chuyển giữa các ngôn ngữ. Tôi đã thấy một số thư viện khử tuần tự JSON chuyển đổi các khóa đó thành kiểu camelCase.

Thí dụ:

var something = {
  "some-value": 'thing'
}

Vs

var something = {
  "someValue": 'thing',
  "some_other_value": 'thing_two'
}

4
REST không có gì để nói về các định dạng tải trọng.
Eric Stein

2
Tại sao bạn sử dụng kebab-case trong JSON? Mọi người thường sử dụng camelCase cho JSON vì luôn tuân theo các quy ước đặt tên của môi trường lập trình và đó là cách thực hành tiêu chuẩn để sử dụng camelCase cho các biến trong JavaScript. Mặc dù tôi đang giả định rằng bạn đang sử dụng JSON để giao tiếp với JavaScript.
Alternatex

1
Tôi thấy câu hỏi được gắn thẻ bằng javascript, nhưng bản thân câu hỏi dường như là về một API giữa các ngôn ngữ / thư viện khác nhau. Nếu bạn quan tâm đến javascript, lưu ý rằng ký hiệu dấu chấm không hoạt động với dấu gạch nối.
Izkata

5
Nó không thực sự là một thực tiễn xấu, vì JSON là ngôn ngữ độc lập và do đó không nên bị ràng buộc bởi cú pháp của bất kỳ ngôn ngữ cụ thể nào. Điều đó nói rằng, thật hợp lý khi chỉ sử dụng các ký tự chữ và số, vì điều này có thể ánh xạ trực tiếp đến các định danh trong tất cả các ngôn ngữ chính, vì vậy điều này sẽ dẫn đến ít rắc rối về ánh xạ nhất.
JacquesB

1
@Alternatex: +1 cho "trường hợp kebab" :-)
gnasher729

Câu trả lời:


13

Bạn có thể sử dụng bất cứ thứ gì dưới dạng các khóa JSON, miễn là nó là UTF-8 hợp lệ, không chứa các điểm mã bằng 0 và sẽ hữu ích nếu bạn có thể biểu diễn khóa dưới dạng một chuỗi trong ngôn ngữ lập trình mà bạn chọn. Tôi có thể khuyên bạn không nên sử dụng các cách biểu diễn Unicode khác nhau của cùng một chuỗi (ví dụ: "" được viết dưới dạng một hoặc hai điểm mã).

Đọc một số bình luận: Có vẻ như một số người cố gắng tạo các lớp với các biến thể hiện khớp với các khóa trong từ điển JSON. Tất nhiên điều này không hoạt động nếu khóa của bạn là "một số giá trị" trừ khi bạn viết COBOL. Tôi nghĩ rằng điều này là sai lầm. Tôi có các lớp mô hình được thiết kế theo cách tôi muốn. JSON chỉ được sử dụng để điền vào các lớp mô hình. Tôi sẽ lấy bất cứ thứ gì mà các máy chủ quyết định sử dụng cho các phím và đưa nó vào các đối tượng mô hình của tôi .


1
thúc giục, bạn đặt câu hỏi làm thế nào chương trình tiêu thụ của bạn truy cập vào các khóa json. Thông thường, điều này được thực hiện bằng cách phân tích json như một đối tượng. Sử dụng hypens hoặc các ký tự khác ngăn chặn điều này chỉ khiến cuộc sống của người tiêu dùng trở nên khó khăn
Ewan

Và điều này là hợp lệ: {"❓": ""}
Vinicius Brasil

1
Làm thế nào để dấu gạch ngang ngăn chặn bất cứ điều gì? Tôi lấy một từ điển và có thể sử dụng "some-key" làm khóa, thậm chí tôi có thể sử dụng "" làm khóa.
gnasher729

8

Có rất nhiều hệ thống tuần tự hóa JSON có khả năng xử lý ánh xạ giữa các tên trường không phù hợp để sử dụng theo ngôn ngữ mà chúng tích hợp. Trong hầu hết các trường hợp, chúng không khó sử dụng và chỉ cần thêm một chút nỗ lực. Trong một thế giới lý tưởng, bạn sẽ không phải như vậy, nhưng nếu API của bạn đã sử dụng dấu gạch ngang, thay đổi nó sẽ chữa được bệnh nặng hơn bệnh. Cũng lưu ý rằng sử dụng dấu gạch ngang là kiểu phổ biến nhất trong một số ngôn ngữ nhất định, đáng chú ý nhất là các ngôn ngữ dựa trên LISP, vì vậy có lẽ có một số ít người tiêu dùng API của bạn rất vui khi thấy dấu gạch ngang thay vì định dạng khác.


Tôi sẽ bỏ phiếu này càng sớm càng tốt. Tôi cảm thấy cái nhìn sâu sắc trong đó, Cảm ơn bạn.
Matt Oaxaca

1

Sau khi dành một chút thời gian trong ngành và làm việc một vài hệ thống. Tôi không nghĩ có một cách thực hành tốt nhất hoặc vỏ phù hợp cho các khóa JSON. Khía cạnh quan trọng nhất của bất kỳ định dạng nào (vỏ / kiểu mã / vv) là tính nhất quán và áp dụng nhóm.

Nếu cơ sở mã bị phân mảnh và không nhất quán, hãy gặp gỡ như một nhóm và thống nhất về một phong cách nhất quán, sau đó cảnh sát hình thành tập thể.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.