使用 Akka Stream 传输巨大的 json

2024-01-04

我有一个 json 板的巨大 http 响应问题,其中只有部分是感兴趣的。 我无法更改响应结构。 这是一个例子

{
  "searchString": "search",
  "redirectUrl": "",
  "0": {
    "numRecords": 123,
    "refinementViewModelCollector": {},
//    Lots of data here
    "results": [
      {
        "productCode": "123",
        "productShortDescription": "Desc",
        "brand": "Brand",
        "productReview": {
          "reviewScore": 0
        },
        "priceView": {
          "salePriceDisplayable": false,
        },
        "productImageUrl": "url",
        "alternateImageUrls": [
          "url1"
        ],
        "largeProductImageUrl": "url4",
        "videoUrl": ""
      },
      {
        "productCode": "124",
        "productShortDescription": "Desc",
        "brand": "Brand",
        "productReview": {
          "reviewScore": 0
         },
        "priceView": {
          "salePriceDisplayable": false,
        },
        "preOrder": false,
        "productImageUrl": "url",
        "alternateImageUrls": [
          "url1"
        ],
        "largeProductImageUrl": "url4",
        "videoUrl": ""
      }
    ]
    //lots of data here
  }
}

我的兴趣点是条目resultsJason Array,但它们位于 json 的中间

我创建了一个小型 Play WS 客户端,如下所示:

val wsClient: WSClient = ???
val ret = wsClient.url("url").stream()
ret.flatMap { response =>
  response.body.via(JsonFraming.objectScanner(1024))
    .map(_.utf8String)
    .runWith(Sink.foreach(println))
}

这是行不通的,因为它会将整个 json 板作为 Json 对象。我需要跳过一些数据直到"results":条目出现在流中,然后开始解析条目并跳过所有其余的。 有什么想法如何做到这一点?


查看Alpakka 的 JSON 模块 https://doc.akka.io/docs/alpakka/current/data-transformations/json.html#streaming-of-nested-structures,它可以流式传输嵌套 JSON 结构的特定部分:

response
  .body
  .via(JsonReader.select("$.0.results[*]"))
  .map(_.utf8String)
  .runWith(Sink.foreach(println)) // or runForeach(println)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Akka Stream 传输巨大的 json 的相关文章

随机推荐

  • 流畅的nhibernate r1.0流畅映射禁用延迟加载

    如何禁用 fn r1 0 中的延迟加载 Fluently Configure Database SQLiteConfiguration Standard InMemory Mappings m gt m AutoMappings Add A
  • Debian Stretch 和 Jessie 32 位库

    对于那些寻找答案的人来说 它就在那里 因为其他网站上并不清楚 至少英特尔编译器需要这样做 也许它对其他软件也有帮助 只需在终端中运行这些命令即可 sudo dpkg add architecture i386 sudo apt get up
  • 如何在单击按钮时切换背景图像?

    我有这个代码 button1 setOnClickListener new OnClickListener Override public void onClick View v TODO Auto generated method stu
  • 正则表达式删除

    标签之间的回车符

    我一直在试图弄清楚如何删除之间发生的回车符 p 标签 从技术上讲 我需要用空格替换它们 而不是删除它们 这是一个例子 我用过美元符号 作为回车标记 p p Ac nec strong 暂停 dapibus strong Nulla taci
  • 使用带有 ssl 证书的 Node 进行 mac 验证失败

    正如 Node api 文档中所指定的 我尝试使用 openssl 自行创建和签名的证书来尝试第一个 一切都很顺利 除了无法从 Android 测试客户端 因为它需要 ca 证书 当我尝试第二种方法 使用 pfx 而不是使用 key cer
  • Amazon Lex AWS Lambda 挂钩的 Jackson JSON 反序列化

    我在 AWS Lex Lambda 挂钩中实现反序列化时遇到问题 我有一个 AWS Lambda 函数来验证用户输入 但我不断收到 JSONMapping 错误 Lex json 是这样的 currentIntent name intent
  • 为什么 iPhone iOS 显示 momentjs 的无效日期

    我有一个日期选择器 它返回一个始终位于 UTC 时区的时刻对象 我需要在这个日期做一些逻辑 但总是希望它在用户本地时区 所以我做了以下操作 strip submission date of timezone offset let submi
  • PIL:无法保存粘贴有png的jpg

    我正在尝试将 png 粘贴到 jpg 上 这是代码 usr bin env python3 from PIL import Image from PIL import ImageDraw im Image open existing jpg
  • 如何获取该月的第几天?

    我正在尝试检索现在是该月的哪一天 比如今天是2011年8月29日 我想做的只是获取天数 例如 29 或 30 这是该月的哪一天 我该怎么做呢 您需要获取一个 Calendar 实例并获取它是一个月中的哪一天 Calendar cal Cal
  • 从 ui 中删除 QComboBox 中的项目

    我正在尝试调整 QComboBox 的 ui 以便用户可以从下拉列表中删除项目 无需先选择它们 背景是我正在使用 QComboBox 来指示当前打开的是哪个数据文件 我还使用它作为最近打开的文件的缓存 我希望用户能够删除他不想再列出的条目
  • Backbone.js 中的 PATCH 请求方法

    正确的执行方式是什么PATCH在 Backbone js 中保存模型属性时请求 从 Backbone js v0 9 9 开始 您可以简单地通过 patch true to save 阅读更多 http backbonejs org cha
  • C++ 函数成员指针

    我已经阅读了几篇关于此的文章 但似乎无法通过示例代码准确找到我正在寻找的内容 如果有人能给我一些帮助 我将非常感激 在我的标题中我有 void addEvent void func Pack void triggerEvents Pack
  • 将小数格式化为正确的区域性信息中的字符串

    将小数金额格式化为字符串以便 UI 以正确的区域性信息显示的最佳方法是什么 向 ToString 添加格式 myDecimal ToString 00 or myDecimal ToString C 对于可为空的小数 decimal 您将需
  • 为什么 CMake 找不到 GTest(Google 测试)?

    有一个现成的项目 在其中一个 cmake 文件中有一个源代码 find package GTest REQUIRED if NOT GTest FOUND message FATAL ERROR Cannot find Google Tes
  • CKAN可以支持Solr 7.0吗?

    我正在尝试在 Ubuntu 16 04 中安装 Solr 7 0 和 CKAN 2 7 2 但是 我得到了以下内容errors 来自 Solr 管理网站 ckan org apache solr common SolrException o
  • 查找图中的最长路径

    我一直在努力找出复杂网络中最长的路径 我在 StackOverflow 和 Internet 上遇到了很多问题 但没有一个可以帮助我 我写了一个 CQL 作为 start n node match p n LinkTo 1 gt m wit
  • Lucene SpanNearQuery 中“Slop”的确切含义(或 ElasticSearch span_near 中的 slop)

    问题一 问题一
  • 如何判断 CSS 背景图像何时加载?事件被触发了吗? [复制]

    这个问题在这里已经有答案了 我有一个带有图像背景的侧边栏小部件 上面是一个搜索输入表单 我不希望在图像加载之前显示输入 有没有办法附加一个load像普通 img 元素 对象一样 CSS 背景图像的事件处理程序 我知道这可以在普通图像上完成
  • 嵌套循环和字符串连接的性能问题

    有人可以解释一下为什么这段代码需要这么长时间才能运行 即 gt 24 小时 行数为 5000 列数为 2000 即大约 10m 循环 有一个更好的方法吗 for int i 0 i lt m rows i for int j 0 j lt
  • 使用 Akka Stream 传输巨大的 json

    我有一个 json 板的巨大 http 响应问题 其中只有部分是感兴趣的 我无法更改响应结构 这是一个例子 searchString search redirectUrl 0 numRecords 123 refinementViewMod