Đọc tập tin json tràn ngăn xếp python

Khi các API gửi dữ liệu, rất có thể chúng sẽ gửi dữ liệu đó dưới dạng các đối tượng JSON. Đây là phần sơ lược về lý do tại sao JSON là cách các ứng dụng được nối mạng gửi dữ liệu

Sam Robbins

Khi web ngày càng phổ biến và mạnh mẽ, lượng dữ liệu được lưu trữ và truyền giữa các hệ thống cũng tăng theo, nhiều trong số đó không biết gì về nhau. Ngay từ đầu, định dạng mà dữ liệu này được chuyển giao đã trở nên quan trọng và giống như web, các định dạng tốt nhất là các tiêu chuẩn mở mà bất kỳ ai cũng có thể sử dụng và đóng góp vào. XML sớm trở nên phổ biến vì nó trông giống như HTML, nền tảng của web. Nhưng nó lộn xộn và khó hiểu.  

Đó là nơi JSON [Ký hiệu đối tượng JavaScript] xuất hiện. Nếu bạn đã sử dụng một API trong vòng 5 đến 10 năm qua, thì có lẽ bạn đã thấy dữ liệu JSON. Mặc dù định dạng này được phát triển lần đầu tiên vào đầu những năm 2000, nhưng các tiêu chuẩn đầu tiên đã được xuất bản vào năm 2006. Hiểu JSON là gì và cách nó hoạt động là một kỹ năng cơ bản cho bất kỳ nhà phát triển web nào.  

Trong bài viết này, chúng tôi sẽ đề cập đến những kiến ​​thức cơ bản về giao diện của JSON và cách sử dụng nó trong các ứng dụng web của bạn, cũng như nói về JSON được tuần tự hóa—JST và JWT—và các định dạng dữ liệu cạnh tranh.  

JSON trông như thế nào

JSON là một định dạng mà con người có thể đọc được để lưu trữ và truyền dữ liệu. Đúng như tên gọi, ban đầu nó được phát triển cho JavaScript, nhưng có thể được sử dụng trong bất kỳ ngôn ngữ nào và rất phổ biến trong các ứng dụng web. Cấu trúc cơ bản được xây dựng từ một hoặc nhiều khóa và giá trị

{
  "key": value
}

 

Bạn sẽ thường thấy một bộ sưu tập khóa. các cặp giá trị được đặt trong ngoặc được mô tả dưới dạng đối tượng JSON. Mặc dù khóa là bất kỳ chuỗi nào, nhưng giá trị có thể là một chuỗi, số, mảng, đối tượng bổ sung hoặc chữ,

{
  "key": "String",
  "Number": 1,
  "array": [1,2,3],	
  "nested": {
	"literals": true
  }	
}
1,
{
  "key": "String",
  "Number": 1,
  "array": [1,2,3],	
  "nested": {
	"literals": true
  }	
}
2 và
{
  "key": "String",
  "Number": 1,
  "array": [1,2,3],	
  "nested": {
	"literals": true
  }	
}
3. Ví dụ: sau đây là JSON hợp lệ

{
  "key": "String",
  "Number": 1,
  "array": [1,2,3],	
  "nested": {
	"literals": true
  }	
}

JSON không nhất thiết phải có khóa duy nhất. cặp giá trị; . Tuy nhiên, hầu như tất cả các đối tượng JSON mà bạn thấy sẽ chứa khóa. cặp giá trị

Sử dụng JSON trong lệnh gọi API

Một trong những cách sử dụng JSON phổ biến nhất là khi sử dụng API, cả trong yêu cầu và phản hồi. Nó nhỏ gọn hơn nhiều so với các tiêu chuẩn khác và cho phép sử dụng dễ dàng trong các trình duyệt web vì JavaScript có thể dễ dàng phân tích các chuỗi JSON, chỉ yêu cầu

{
  "key": "String",
  "Number": 1,
  "array": [1,2,3],	
  "nested": {
	"literals": true
  }	
}
0 để bắt đầu sử dụng nó

{
  "key": "String",
  "Number": 1,
  "array": [1,2,3],	
  "nested": {
	"literals": true
  }	
}
1 lấy một chuỗi JSON hợp lệ và trả về một đối tượng JavaScript. Ví dụ: nó có thể được gọi trên phần thân của phản hồi API để cung cấp cho bạn một đối tượng có thể sử dụng được. Nghịch đảo của hàm này là
{
  "key": "String",
  "Number": 1,
  "array": [1,2,3],	
  "nested": {
	"literals": true
  }	
}
2 lấy một đối tượng JavaScript và trả về một chuỗi JSON, sau đó có thể được truyền trong một yêu cầu hoặc phản hồi API.  

JSON không được yêu cầu bởi REST hoặc GraphQL, cả hai định dạng API rất phổ biến. Tuy nhiên, chúng thường được sử dụng cùng nhau, đặc biệt là với GraphQL, nơi tốt nhất nên sử dụng JSON do nó nhỏ và chủ yếu là văn bản. Nếu cần thì nén rất tốt bằng GZIP

Các yêu cầu của GraphQL không được tạo bằng JSON, thay vào đó sử dụng một hệ thống tương tự như JSON, như thế này

{
  foo {
    bar
    baz
  }
}

Cái nào sẽ trả về dữ liệu có liên quan và nếu sử dụng JSON, nó sẽ khớp rất chặt chẽ

{
  "foo": {
    "bar": "data",
    "baz": "data"
  }
}

Sử dụng tệp JSON trong JavaScript

Trong một số trường hợp, bạn có thể muốn tải JSON từ một tệp, chẳng hạn như tệp cấu hình hoặc dữ liệu giả. Sử dụng JavaScript thuần túy, hiện tại không thể nhập tệp JSON, tuy nhiên, một đề xuất đã được tạo để cho phép điều này. Ngoài ra, nó là một tính năng rất phổ biến trong các gói và trình biên dịch, như webpack và Babel. Hiện tại, bạn có thể nhận được chức năng tương đương bằng cách xuất một Đối tượng JavaScript giống như JSON mong muốn của bạn từ một tệp JavaScript

{
  "key": "String",
  "Number": 1,
  "array": [1,2,3],	
  "nested": {
	"literals": true
  }	
}
3

Bây giờ, đối tượng này sẽ được lưu trữ trong hằng số,

{
  "key": "String",
  "Number": 1,
  "array": [1,2,3],	
  "nested": {
	"literals": true
  }	
}
4 và sẽ có thể truy cập được trong ứng dụng của bạn bằng cách sử dụng các câu lệnh
{
  "key": "String",
  "Number": 1,
  "array": [1,2,3],	
  "nested": {
	"literals": true
  }	
}
5 hoặc
{
  "key": "String",
  "Number": 1,
  "array": [1,2,3],	
  "nested": {
	"literals": true
  }	
}
6. Lưu ý rằng thao tác này sẽ nhập một bản sao của dữ liệu, do đó, việc sửa đổi đối tượng sẽ không ghi dữ liệu trở lại tệp hoặc cho phép sử dụng dữ liệu đã sửa đổi trong các tệp khác.  

Truy cập và sửa đổi các đối tượng JavaScript

Sau khi bạn có một biến chứa dữ liệu của mình, trong ví dụ này là

{
  "key": "String",
  "Number": 1,
  "array": [1,2,3],	
  "nested": {
	"literals": true
  }	
}
4, để truy cập giá trị của khóa bên trong biến đó, bạn có thể sử dụng
{
  "key": "String",
  "Number": 1,
  "array": [1,2,3],	
  "nested": {
	"literals": true
  }	
}
8 hoặc
{
  "key": "String",
  "Number": 1,
  "array": [1,2,3],	
  "nested": {
	"literals": true
  }	
}
9. Dấu ngoặc vuông phải được sử dụng để lập chỉ mục mảng;

Sửa đổi đối tượng hoạt động theo cùng một cách. Bạn chỉ có thể đặt

{
  foo {
    bar
    baz
  }
}
2 và khóa đó giờ sẽ có giá trị “foo”. Mặc dù chỉ có thể thay thế phần tử cuối cùng trong chuỗi đối tượng;

So sánh với YAML và XML

JSON không phải là tiêu chuẩn dữ liệu thân thiện với web duy nhất hiện có. Đối thủ cạnh tranh chính của JSON trong API là XML. Thay vì JSON sau đây

{
  "key": "String",
  "Number": 1,
  "array": [1,2,3],	
  "nested": {
	"literals": true
  }	
}
9

trong XML, thay vào đó bạn có

{
  "key": "String",
  "Number": 1,
  "array": [1,2,3],	
  "nested": {
	"literals": true
  }	
}
0

JSON được chuẩn hóa muộn hơn nhiều so với XML, với đặc điểm kỹ thuật cho XML ra đời vào năm 1998, trong khi JSON được Ecma International chuẩn hóa vào năm 2013. XML cực kỳ phổ biến và được thấy trong các tiêu chuẩn như AJAX [JavaScript và XML không đồng bộ] và hàm

{
  foo {
    bar
    baz
  }
}
5 trong JavaScript

XML được tiêu chuẩn API chính sử dụng. Giao thức truy cập đối tượng đơn giản [SOAP]. Tiêu chuẩn này có thể dài dòng hơn đáng kể so với REST và GraphQL, một phần do việc sử dụng XML và vì tiêu chuẩn này bao gồm nhiều thông tin hơn, chẳng hạn như mô tả không gian tên XML như một phần của hệ thống phong bì. Đây có thể là lý do tại sao việc sử dụng SOAP đã giảm trong nhiều năm

từ https. // thông tin chi tiết. ngăn xếp chồng lên nhau. com/trends?tags=soap%2Crest%2Cgraphql

Một giải pháp thay thế khác là YAML, có độ dài tương tự JSON hơn nhiều so với XML, với ví dụ tương tự là

{
  "key": "String",
  "Number": 1,
  "array": [1,2,3],	
  "nested": {
	"literals": true
  }	
}
2

Tuy nhiên, không giống như XML, YAML không thực sự cạnh tranh với JSON dưới dạng định dạng dữ liệu API. Thay vào đó, nó chủ yếu được sử dụng cho các tệp cấu hình—Kubernetes chủ yếu sử dụng YAML để định cấu hình cơ sở hạ tầng. YAML cung cấp các tính năng mà JSON không có, chẳng hạn như nhận xét. Không giống như JSON và XML, các trình duyệt không thể phân tích cú pháp YAML, vì vậy cần thêm một trình phân tích cú pháp dưới dạng thư viện nếu bạn muốn sử dụng YAML để trao đổi dữ liệu

JSON đã ký

Mặc dù nhiều trường hợp sử dụng JSON truyền nó dưới dạng văn bản rõ ràng, nhưng định dạng này cũng có thể được sử dụng để truyền dữ liệu an toàn. Chữ ký web JSON [JWS] là các đối tượng JSON  được ký an toàn bằng cặp khóa bí mật hoặc công khai/riêng tư. Chúng bao gồm một tiêu đề, tải trọng và chữ ký.  

Tiêu đề chỉ định loại mã thông báo và thuật toán ký đang được sử dụng. Trường bắt buộc duy nhất là

{
  foo {
    bar
    baz
  }
}
6 để chỉ định thuật toán mã hóa được sử dụng, nhưng có thể bao gồm nhiều khóa khác, chẳng hạn như
{
  foo {
    bar
    baz
  }
}
7 cho loại chữ ký.  

Tải trọng của JWS là thông tin được truyền và không cần định dạng JSON mặc dù thông thường là.  

Chữ ký được tạo bằng cách áp dụng thuật toán mã hóa được chỉ định trong tiêu đề cho các phiên bản base64 của tiêu đề và tải trọng được nối với nhau bằng dấu chấm. JWS cuối cùng sau đó là tiêu đề base64, tải trọng base64 và chữ ký được nối bằng dấu chấm. Ví dụ

{
  foo {
    bar
    baz
  }
}
8

JSON Web Tokens [JWT] là một dạng đặc biệt của JWS. Đây là đặc biệt hữu ích cho ủy quyền. khi người dùng đăng nhập vào một trang web, họ sẽ được cung cấp JWT. Đối với mỗi yêu cầu tiếp theo, họ sẽ bao gồm mã thông báo này dưới dạng mã thông báo mang trong tiêu đề ủy quyền

Để tạo JWT từ JWS, bạn cần định cấu hình cụ thể từng phần. Trong tiêu đề, đảm bảo rằng khóa

{
  foo {
    bar
    baz
  }
}
7 là
{
  "foo": {
    "bar": "data",
    "baz": "data"
  }
}
0. Đối với khóa
{
  foo {
    bar
    baz
  }
}
6, các tùy chọn của
{
  "foo": {
    "bar": "data",
    "baz": "data"
  }
}
2 [HMAC SHA-256] và
{
  "foo": {
    "bar": "data",
    "baz": "data"
  }
}
3 [không được mã hóa] phải được hỗ trợ bởi máy chủ ủy quyền để triển khai JWT phù hợp, vì vậy luôn có thể được sử dụng. Các thuật toán bổ sung được khuyến nghị nhưng không được thực thi

Trong tải trọng là một loạt các khóa được gọi là xác nhận quyền sở hữu, là các mẩu thông tin về một chủ đề, vì JWT thường được sử dụng để xác thực, đây thường là người dùng, nhưng có thể là bất kỳ thứ gì khi được sử dụng để trao đổi thông tin.  

Chữ ký sau đó được xây dựng giống như tất cả các JWS khác

So với Mã thông báo ngôn ngữ đánh dấu xác nhận bảo mật [SAML], một tiêu chuẩn tương tự sử dụng XML, JSON cho phép JWT nhỏ hơn mã thông báo SAML và dễ phân tích cú pháp hơn do sử dụng cả hai mã thông báo trong trình duyệt, nơi JavaScript là ngôn ngữ chính

Sự kết luận

JSON đã trở thành một trong những tiêu chuẩn phổ biến nhất để trao đổi dữ liệu, giúp con người dễ đọc trong khi trọng lượng nhẹ để đảm bảo kích thước truyền nhỏ. Thành công của nó cũng là do nó tương đương với các đối tượng JavaScript, khiến nó dễ dàng xử lý ở giao diện người dùng web. Tuy nhiên, JSON không phải là giải pháp cho mọi thứ và các tiêu chuẩn thay thế như YAML phổ biến hơn cho những thứ như tệp cấu hình, vì vậy điều quan trọng là phải xem xét mục đích của bạn trước khi chọn.  

Chủ Đề