在猪中解析复杂的json?

时间:2013-08-30 02:44:05

标签: json apache-pig

我有以下格式的json文件:

{ "_id" : "foo.com", "categories" : [], "h1" : { "bar==" : { "first" : 1281916800, "last" : 1316995200 }, "foo==" : { "first" : 1281916800, "last" : 1316995200 } }, "name2" : [ "foobarl.com", "foobar2.com" ], "rep" : null }

那么,我如何在猪身上解析这个json ..

另外,类别和代表可以在其中包含一些字符......并且可能并不总是为空。 我做了以下尝试。

a = load 'sample_json.json' using JsonLoader('id:chararray,categories:[chararray], hostt:{ (variable_a: {(first:int,last:int)})}, ns:[chararray],rep:chararray  ');

但是我收到了这个错误:

  

org.codehaus.jackson.JsonParseException:意外字符('D'(代码68)):预期有效值(数字,字符串,数组,对象,'true','false'或'null')    在[来源:java.io.ByteArrayInputStream@4795b8e9; line:1,column:50]       at org.codehaus.jackson.JsonParser._constructError(JsonParser.java:1291)       at org.codehaus.jackson.impl.JsonParserMinimalBase._reportError(JsonParserMinimalBase.java:385)       在org.codehaus.jackson.impl.JsonParserMinimalBase._reportUnexpectedChar(JsonParserMinimalBase.java:306)       在org.codehaus.jackson.impl.Utf8StreamParser._handleUnexpectedValue(Utf8StreamParser.java:1582)       at org.codehaus.jackson.impl.Utf8StreamParser.nextToken(Utf8StreamParser.java:386)       在org.apache.pig.builtin.JsonLoader.readField(JsonLoader.java:173)       在org.apache.pig.builtin.JsonLoader.getNext(JsonLoader.java:157)       在org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigRecordReader.nextKeyValue(PigRecordReader.java:211)       at org.apache.hadoop.mapred.MapTask $ NewTrackingRecordReader.nextKeyValue(MapTask.java:532)       at org.apache.hadoop.mapreduce.MapContext.nextKeyValue(MapContext.java:67)       在org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:143)       在org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:764)       在org.apache.hadoop.mapred.MapTask.run(MapTask.java:370)       在org.apache.hadoop.mapred.LocalJobRunner $ Job.run(LocalJobRunner.java:212)

1 个答案:

答案 0 :(得分:3)

您可以使用大象鸟猪罐解析json。它可以解析所有类型的json数据。 以下是使用此jar通过大象鸟猪解析json的某些示例。 https://github.com/twitter/elephant-bird/tree/master/examples/src/main/pig

即使没有预期的json标记,它也不会中断。