从JSON流

时间:2016-05-21 12:01:56

标签: java json streaming

我需要从后端向用户提供JSON。但是在通过网络发送之前我需要删除一些数据,因为它是保密的,每个元素的密钥都以conf_开头。

假设我有以下JSON源:

{
  "store": {
    "book": [
      {
        "category": "reference",
        "conf_author": "Nigel Rees",
        "title": "Sayings of the Century",
        "conf_price": 8.95
      },
      {
        "category": "fiction",
        "conf_author": "Evelyn Waugh",
        "title": "Sword of Honour",
        "conf_price": 12.99
      },
      {
        "category": "fiction",
        "conf_author": "Herman Melville",
        "title": "Moby Dick",
        "isbn": "0-553-21311-3",
        "conf_price": 8.99
      },
      {
        "category": "fiction",
        "conf_author": "J. R. R. Tolkien",
        "title": "The Lord of the Rings",
        "isbn": "0-395-19395-8",
        "conf_price": 22.99
      }
    ],
    "bicycle": {
      "color": "red",
      "conf_price": 19.95
    }
  },
  "expensive": 10
}

由于soruce JSON的结构可能会有所不同(未知),因此我需要一种方法来识别要根据键名(^conf_)通过模式删除的元素。 所以生成的JSON应该是:

{
  "store": {
    "book": [
      {
        "category": "reference",
        "title": "Sayings of the Century"
      },
      {
        "category": "fiction",
        "title": "Sword of Honour"
      },
      {
        "category": "fiction",
        "title": "Moby Dick",
        "isbn": "0-553-21311-3"
      },
      {
        "category": "fiction",
        "title": "The Lord of the Rings",
        "isbn": "0-395-19395-8"
      }
    ],
    "bicycle": {
      "color": "red"
    }
  },
  "expensive": 10
}

由于我的源JSON在books数组中将有1m +条目,其中每个条目将有100多个字段(子对象),我正在寻找一些基于流/事件的方法,如StAX,而不是将整个JSON解析为JSONObject出于性能和资源原因进行操作。

我查看了JoltJSONPathJsonSurfer之类的内容,但到目前为止,这些图书馆让我无处可去。

任何人都可以提供一些有关如何最好地实现我的用例的详细信息吗?

问候!

1 个答案:

答案 0 :(得分:0)

你可以使用Jackson的Streaming API,它可以用来解析甚至千兆字节大小的巨大JSON。它可以用来处理大文件而无需将它们完全加载到内存中。它允许获取你想要的数据并忽略你的内容不想也

了解详情:http://wiki.fasterxml.com/JacksonStreamingApi