2010-08-27 56 views
3

我做了一件愚蠢的事情......我收集了大量的json数据并将其保存在一个文件中。由于JSON对象之后的JSON对象,我现在发现自己在尝试JSON.parse(文件)时发现错误。任何人都可以建议我如何解析这些数据?结构如下所示。下一个条目是具有完全相同结构的对象。在一个文件中处理多个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": []}} 

回答

3

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

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

您可以通过搜索}\s*{序列,并与}, {序列替换到这样的事情把它:

[ 
{ 
    "a" : "b", 
    "c" : "d" 
}, 
{ 
    "a" : "e", 
    "c" : "f", 
} 
] 
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 

所以,我会在最后一个大括号的末尾添加''key':''和''''。使其有效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"}]}