Parse JSON trong Crystal Lang
crystal
3
Male avatar

tuhoanggggg viết ngày 14/08/2015

Giả sử bạn cần parse JSON có nội dung như sau:

"[{\"order_id\":\"12345\",\"customer_id\":\"AUD101\"},{\"order_id\":\"12346\",\"customer_id\":\"AUD102\"}]"

trong Crystal.

Nếu biết rõ cấu trúc của JSON response thì nên tạo 1 class schema như sau:

module Playground
  class SampleResponse
    json_mapping({
      order_id: {type: String},
      customer_id: {type: String},
    })
  end
end

Và tiến hành... parse:

Array(Playground::SampleResponse).from_json(json_response)

Nâng cao

Thường các trường như created_at, updated_at để tiện sử dụng trong script của bạn nên convert luôn khi parse JSON với options converter.

json_mapping({
    created_at: {type: Time, converter: TimeFormat.new("%a %b %d %T +0000 %Y")},
})

Lưu ý class sử dụng để convert cần phải có 2 class methods from_jsonto_json mới không báo lỗi. Thi thoảng có 1 vài API trả về ID là string có thể convert sang Int32 nhưng Int32 của Crystal không có 2 methods (class hoặc instance đều được) trên nên bạn phải extend.

module Playground
  class IntFormat
    def self.from_json(pull : JSON::PullParser)
      string = pull.read_string
      string.to_i
    end
  end
end
json_mapping({
    customer_id: {type: Int32, converter: IntFormat},
})
puts Array(Playground::SampleResponse).first.customer_id.class
=> Int32
Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

Male avatar

tuhoanggggg

3 bài viết.
0 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
Male avatar
6 2
Apache Bench ➜ ab t 5 c 20 https://www.google.com/ This is ApacheBench, Version 2.3 Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www....
tuhoanggggg viết 3 năm trước
6 2
Male avatar
1 0
Bài này đi theo bài: (Link). Sẽ là một bài đơn giản, không cao siêu, mục đích là để bạn get started with testing càng sớm càng tốt. Viết code mà k...
tuhoanggggg viết 3 năm trước
1 0
Bài viết liên quan
White
9 3
(Ảnh) Lời mở Không thể phủ nhận là trong 5 năm đổ lại đây ngôn ngữ Ruby với cú pháp dễ học, cộng đồng và thư viện đồ sộ đã giúp nó lên ngôi tron...
Lơi Rệ viết hơn 3 năm trước
9 3
Male avatar
1 0
Bài này đi theo bài: (Link). Sẽ là một bài đơn giản, không cao siêu, mục đích là để bạn get started with testing càng sớm càng tốt. Viết code mà k...
tuhoanggggg viết 3 năm trước
1 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


Male avatar
{{userFollowed ? 'Following' : 'Follow'}}
3 bài viết.
0 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!