간단한 파서는 몇 가지 예를 통해 테스트되었습니다.
사용법 :
parse_string("{web:{url:http://www.example.com,toke:somevalue},username:person}")
=> {"web"=>{"url"=>"http://www.example.com", "toke"=>"somevalue"}, "username"=>"person"}
파서 코드 : 나는 당신이 사용할 수있는 보석이 있거나 보석 목록에 포함하고자하는 가정 ActiveSupport :: JSON.decode를 사용하는 것이 좋습니다
class ParserIterator
attr_accessor :i, :string
def initialize string,i=0
@i=i
@string=string
end
def read_until(*sym)
res=''
until sym.include?(s=self.curr)
throw 'syntax error' if s.nil?
res+=self.next
end
res
end
def next
self.i+=1
self.string[self.i-1]
end
def get_next
self.string[self.i+1]
end
def curr
self.string[self.i]
end
def check(*sym)
throw 'syntax error' until sym.include?(self.next)
end
def check_curr(*sym)
throw 'syntax error' until sym.include?(self.curr)
end
end
def parse_string(str)
parse_hash(ParserIterator.new(str))
end
def parse_hash(it)
it.check('{')
res={}
until it.curr=='}'
it.next if it.curr==','
k,v=parse_pair(it)
res[k]=v
end
it.check('}')
res
end
def parse_pair(it)
key=it.read_until(':')
it.check(':')
value=(it.curr=='{' ? parse_hash(it) : it.read_until(',','}'))
return key,value
end
해시 문자열 표현의 Ruby 또는 JSON 형식이 아니기 때문에 해시 문자열 표현 형식에 대한 세부 정보를 알려주시겠습니까? – waldrumpus
'url'이 키인지 'url : http'가 키인지 어떻게 알 수 있습니까? 그리고'toke'를'token '으로 바꾸는 규칙은 무엇입니까? – sawa
형식으로 빈 값을 설정하는 방법은 무엇입니까? – rogal111