尝试使用Jackson将JSON文件读入Map

时间:2017-04-02 15:25:20

标签: java jackson

我有一个具有此结构的JSON文件......

{"id":"1","name":"name","categories":["category1","category2","category3"],"type":"store"}
{"id":"2","name":"name","categories":["category1","category2","category3"],"type":"store"}

没有分隔每个对象的键或逗号。所以当我使用这段代码时......

    File input = new File("test.json");
    ObjectMapper mapper = new ObjectMapper();
    Map obj = mapper.readValue(input, Map.class);

obj变量只有json文件中的第一行才有意义,因为它不知道密钥是什么。

我尝试通过包装像这样的对象来添加一个......

{ "Key": [

    {"id":"1","name":"name","categories":["category1","category2","category3"],"type":"store"},
    {"id":"2","name":"name","categories":["category1","category2","category3"],"type":"store"}
] }

包括添加逗号以将每个逗号分开,因为文件没有任何逗号来分隔它们。

虽然这有效......

  1. 我有多个必须使用的json文件
  2. 文件大小有点大,所以需要很长时间才能像我在示例中那样添加“Key”换行。
  3. 我希望完全避免这种情况,但不确定我是否可以。有没有办法使用原始格式将json文件读入Map中,以便我可以根据需要过滤数据?

1 个答案:

答案 0 :(得分:1)

有一个简单的解决方案,不需要修改文件。逐行阅读您的文件,然后将一行提供给function countPositivesSumNegatives(input) { let countPositive = 0; let sumNegative = 0; if (input === null || input === []){ return []; } else { sumNegative = input.reduce(function(prev,num){ if (num > 0) { countPositive++; } else { prev += num; } return prev; // <---- THE MISSING PART }, 0); } return [countPositive, sumNegative]; } var data = [1,2,3,4,5,-4,7,-3]; console.log(countPositivesSumNegatives(data));。您将获得许多地图实例,您可以将它们存储在List,JsonArray或您需要在代码中创建的其他地图中。你的代码看起来像:

.reduce()