루비의 JSON 문자열 구문 분석
루비로 해석하고 싶은 문자열이 있습니다.
string = '{"desc":{"someKey":"someValue","anotherKey":"value"},"main_item":{"stats":{"a":8,"b":12,"c":10}}}'
데이터를 쉽게 추출할 수 있는 방법이 있나요?
이것은 JavaScript Object Notation(JSON; JavaScript 객체 표기법)과 비슷합니다.일부 변수에 있는 JSON을 구문 분석할 수 있습니다.json_string다음과 같은 경우:
require 'json'
JSON.parse(json_string)
오래된 Ruby를 사용하는 경우 json gem을 설치해야 할 수 있습니다.
또, JSON for Ruby 의 실장은, 몇개의 유스케이스에 보다 적합할 가능성이 있습니다.
해석된 오브젝트에 대해 수행할 작업에 대한 답변을 조금 더 확장합니다.
# JSON Parsing example
require "rubygems" # don't need this if you're Ruby v1.9.3 or higher
require "json"
string = '{"desc":{"someKey":"someValue","anotherKey":"value"},"main_item":{"stats":{"a":8,"b":12,"c":10}}}'
parsed = JSON.parse(string) # returns a hash
p parsed["desc"]["someKey"]
p parsed["main_item"]["stats"]["a"]
# Read JSON from a file, iterate over objects
file = open("shops.json")
json = file.read
parsed = JSON.parse(json)
parsed["shop"].each do |shop|
p shop["id"]
end
Ruby v1.9.3에서는 JSON을 해석하기 위해 Gems를 설치할 필요가 없습니다.단순히 사용하세요.require 'json':
require 'json'
json = JSON.parse '{"foo":"bar", "ping":"pong"}'
puts json['foo'] # prints "bar"
Ruby-Doc의 JSON을 참조하십시오.
JSON 스트링 같아요많은 JSON 라이브러리 중 하나를 사용할 수 있으며 다음 작업만 하면 됩니다.
JSON.parse(string)
해시 이외의 오브젝트에 대한 직접 해석을 언급하는 답변은 여기에서는 찾을 수 없습니다.단, object_class 옵션을 사용할 수 있습니다(https://ruby-doc.org/stdlib-2.7.1/libdoc/json/rdoc/JSON.html) 참조).
JSON.parse('{"foo":{"bar": 2}}', object_class: OpenStruct).foo.bar
=> 2
이 옵션을 읽는 더 좋은 방법은 "json 객체가 변하는 루비 클래스"입니다. 이것은 왜 Hash가 기본인지 설명합니다.마찬가지로 json 어레이에는 array_class 옵션이 있습니다.
조금 늦은 감이 있지만 기여할 만한 흥미로운 점을 발견했어요.
실수로 이 코드를 작성했는데 작동되는 것 같습니다.
require 'yaml'
CONFIG_FILE = ENV['CONFIG_FILE'] # path to a JSON config file
configs = YAML.load_file("#{CONFIG_FILE}")
puts configs['desc']['someKey']
YAML 라이브러리를 사용하고 있기 때문에, 동작하고 있는 것을 보고 놀랐습니다만, 동작하고 있습니다.
그게 중요한 이유는yaml루비에 내장되어 있기 때문에, 보석의 인스톨은 불필요합니다.
버전 1.8.x 및 1.9.x를 사용하고 있기 때문에json라이브러리는 내장되어 있지 않지만 버전 2.x에 있습니다.
엄밀히 말하면 2.0 이전 버전에서 데이터를 추출하는 가장 쉬운 방법입니다.
표준 JSON 라이브러리보다 빠르기 때문에 OJ를 추천합니다.
OpenStruct가 아닌 자신의 클래스로 역직렬화하려는 경우, 다음을 실현하는 데 많은 작업이 필요하지 않습니다.
require 'json'
# result is an instance of MyClass
result = JSON.parse(some_json_string, object_class: MyClass)
당신이 해야 할 일은 제로 인수 컨스트럭터를 제공하고 구현하기만 하면 됩니다.#[]=어떤 방법JSON.parse가 전화할 겁니다.공개하지 않으려면 비공개로 하면 됩니다.
class MyClass
attr_reader :a, :b
private
def []=(key, value)
case key
when 'a' then @a = value
when 'b' then @b = value
end
end
end
irb로 테스트:
> JSON.parse('{"a":1, "b":2}', object_class: MyClass)
=> #<MyClass:0x00007fe00913ae98 @a=1, @b=2>
이 접근법의 경고는 플랫 구조에서만 작동한다는 것입니다.object_class 위해 해야 하는 를 알려 .Hash한 인수(「」를해 주세요.array_classJSON j j j j j j j j j j j j j j j j j j)중첩 구조의 경우 동일한 클래스를 사용하여 모든 레이어를 나타냅니다.
> JSON.parse('{"a":1, "b":{ "a": 32 }}', object_class: MyClass)
=> #<MyClass:0x00007fb5110b2b38 @a=1, @b=#<MyClass:0x00007fb5110b2908 @a=32>>
언급URL : https://stackoverflow.com/questions/5410682/parsing-a-json-string-in-ruby
'programing' 카테고리의 다른 글
| WordPress 3.5 미디어 업로더 다중 파일 선택 (0) | 2023.02.07 |
|---|---|
| WP Rest API + 각도JS : 페이지에 표시할 Feature Image를 캡처하는 방법 (0) | 2023.02.07 |
| Woocommerce Wordpress - update_post_meta를 사용하여 제품 속성을 추가합니다. (0) | 2023.02.07 |
| 함수 간에 생성된 PHP 변수를 다른 함수로 전달합니다. (0) | 2023.02.07 |
| FTP 없이 워드프레스 관리 영역에서 테마 다운로드 (0) | 2023.02.07 |