在一个文件中处理多个JSON对象

时间:2010-08-27 11:31:22

标签: ruby json

我做了一些愚蠢的事......我收集了大量的json数据并将其保存在一个文件中。我现在发现自己在尝试JSON.parse(文件)时遇到错误,因为它的JSON对象在JSON对象之后。任何人都可以建议我如何解析这些数据?结构如下。下一个条目是具有完全相同结构的对象。

{"purchase": 
  { 
   "amount": 34.595399, 
   "uid": 1282907706, 
   "user": 
          {
                 "id": xxxx
                 "name": "xxxx"
          }, 
    "dailycount": 135.82373100000001, 
    "productdetails": 
     {
          "type": "shoes"
     }, 
    "details": 
    {
          "gender": "male"
   }, 
   "createdin": "Asia/Tokyo", 
   "id": 147707740, 
   "comments": []}} 

2 个答案:

答案 0 :(得分:4)

问题当然是你没有有效的json对象。

irb(main):004:0> JSON.parse("{'foo':'bar'},{'foo':'baz'}")
JSON::ParserError: 705: unexpected token at '{'foo':'bar'},{'foo':'baz'}'
    from /usr/lib/ruby/gems/1.8/gems/json-1.4.6/lib/json/common.rb:146:in `parse'
    from /usr/lib/ruby/gems/1.8/gems/json-1.4.6/lib/json/common.rb:146:in `parse'
    from (irb):4

所以,我会在你最后一个大括号的末尾添加一个'“键”:['和''''。使它成为有效的json。

irb(main):018:0> json = '{"key" : [{"foo":"bar"}, {"foo":"baz"}]}'
=> "{\"key\" : [{\"foo\":\"bar\"}, {\"foo\":\"baz\"}]}"
irb(main):019:0> JSON.parse json
=> {"key"=>[{"foo"=>"bar"}, {"foo"=>"baz"}]}

答案 1 :(得分:3)

你可以使用搜索&在文本编辑器中替换?我的意思是,如果你有一大堆这样的代码:

{
   "a" : "b",
   "c" : "d"
}
{
   "a" : "e",
   "c" : "f",
}

您可以通过搜索}\s*{序列并将}, {序列替换为以下内容来启用它:

[
{
   "a" : "b",
   "c" : "d"
},
{
   "a" : "e",
   "c" : "f",
}
]