怎样用 esProc 计算来自 Restful 的多层 json 数据

简介: esProc 是一款强大的数据处理工具,可简化 Java 处理 Restful 接口返回的复杂多层 JSON 数据的难题。通过 esProc,不仅能轻松访问和解析 Restful 数据,还能高效完成复杂计算任务,并可无缝嵌入 Java 应用中作为计算引擎使用。例如,筛选特定分类订单或计算金额,esProc 的脚本简洁直观,远优于传统 SQL 或纯 Java 实现。此外,esProc 支持安全认证(如 Cookie 和 Token)及 JDBC 集成,为开发者提供灵活高效的解决方案。

接收 Restful 的 json 数据后经常还要计算,用 Java 处理会比较麻烦。用 esProc 会简单很多,不仅能对接 Restful 接口,擅长处理多层数据,还能嵌入 Java 应用使用,可以作为应用内计算引擎使用。

可以先到乾学院下载 esProc 标准版,它是免费的。

安装完成后,先尝试一下访问 Restful 数据。

Restful 访问
直接访问
Rest 服务提供各种数据访问接口,比如访问:http://192.168.2.52:8503/orders可以获得订单数据:

接收 Restful 的 json 数据后经常还要计算,用 Java 处理会比较麻烦。用 esProc 会简单很多,不仅能对接 Restful 接口,擅长处理多层数据,还能嵌入 Java 应用使用,可以作为应用内计算引擎使用。

先到https://www.esproc.com/download-esproc/ 下载 esProc 标准版。

安装完成后,先尝试一下访问 Restful 数据。

Restful 访问
直接访问
Rest 服务提供各种数据访问接口,比如访问:http://192.168.2.52:8503/orders可以获得订单数据:
f60ecd3bc23d0244c073fdd6ae01f21b_1744783207667100.png

Orders 采用多层 json 存储了订单产品等相关信息,结构如下:

[
  {
   
    "order_id": "ORD001",
    "order_date": "2025-03-01",
    "customer": "Alice Johnson",
    "order_details": [
      {
   
        "detail_id": "D001",
        "quantity": 2,
        "price": 50.0,
        "product": {
   
          "product_id": "P001",
          "name": "Wireless Mouse",
          "category": "Electronics"
        }
      },
      {
   
        "detail_id": "D002",
        "quantity": 1,
        "price": 120.0,
        "product": {
   
          "product_id": "P002",
          "name": "Mechanical Keyboard",
          "category": "Electronics"
        }
      }
    ]
  },
  {
   
    "order_id": "ORD002",
    "order_date": "2025-03-02",
    "customer": "Bob Smith",
    "order_details": [
      {
   
        "detail_id": "D003",
        "quantity": 3,
        "price": 25.0,
        "product": {
   
          "product_id": "P003",
          "name": "Bluetooth Headphones",
          "category": "Electronics"
        }
      },
      {
   
        "detail_id": "D004",
        "quantity": 1,
        "price": 200.0,
        "product": {
   
          "product_id": "P004",
          "name": "Smart Watch",
          "category": "Wearables"
        }
      }
    ]
  },]

编写 esProc 脚本访问 orders 数据:

QQ_1744881897424.png

这里使用 httpfile 函数访问 Restful 服务读取 order 数据,A2 使用 json 函数将 json 串转成二维序表。

按 ctrl+F9 运行脚本:

949bcc4e14aff026fe1b9a702af8128d_1744783207794100.png

可以正常访问。这里使用 httpfile 函数访问 Restful 服务读取 order 数据,然后 A2 使用 json 函数将 json 串转成二维序表。

下面做一个计算:筛选包含某个分类(如 Electronics),且订单金额不低于 200 的订单。

设置脚本参数:

f6b11f466fc6268251be840dfcd4c4e2_1744783207937100.png

编写脚本:

QQ_1744881935697.png

A3 进行条件过滤,这里直接用点(.)操作符引用下一层级的数据,多层就直接点下去就可以,表达很清晰。

执行可以看到各步骤运行结果:

image.png

还可以写成一句:

=json(httpfile("http://172.20.10.7:8503/orders").read()).select(order_details.select@1(product.category==categ) && order_details.sum(price*quantity)>200). new(order_id,order_date,customer,order_details.sum(price*quantity):amount)

值得一提的是,这种任务即使用支持 json 较好的 DuckDB SQL 也不好算(先不考虑访问 Restful 服务的复杂度):

SELECT
    o.order_id, 
    LIST_FILTER(o.order_details, x -> x.product.category = 'Electronics') AS order_details
FROM read_json_auto(orders.json') AS o
WHERE 
    ARRAY_LENGTH(LIST_FILTER(o.order_details, x -> x.product.category = 'Electronics')) > 0
    AND SUM(
        LIST_FILTER(o.order_details, x -> x.product.category = 'Electronics') -> 
            (x -> x.price * x.quantity)
) > 200;

相比之下 esProc 就简单多了,而且还能非常方便地访问 Restful 服务。

安全控制
为了数据的安全性,有些 REST 服务器会对访问数据者的身份进行认证,只有通过认证的访问才能读取到数据。常用的身份认证分为两大类,一类是用户访问认证页面后,服务器将认证后的信息记录在 Session 并将 Session 号发回客户端的 Cookie 中,或者将认证信息也发回客户端的 Cookie 中。当要访问有权限控制的页面数据时,需要将 Cookie 中保存的内容放在申请头中,服务器就能判断出访问者的身份,从而决定是否允许访问此页数据。另一类是用户访问认证页面后,服务器返回一个访问令牌 Token,在令牌有效期内,访问有权限控制页面数据时将 Token 作为参数传回就可以了。

这里给出两个示例。

服务器以 Session 或 Cookie 保存身份认证
QQ_1744882009943.png

服务器返回 Token
QQ_1744882023057.png

应用集成
下面把 esProc 集成到 Java 应用中。

从 [esProc 安装目录]\esProc\lib 目录下找到 esProc JDBC 相关的 jar 包:esproc-bin-xxxx.jar、icu4j_60.3.jar。
5712126a1dd5db9ca4fd8be3114b48af_1744783207403100.png

将这两个 jar 包部署到 Java 开发环境的类路径下,同时将 MySQL 的驱动包也放到应用中。

再从目录 [esProc 安装目录]\esProc\config 下找到 esProc 配置文件 raqsoftConfig.xml,同样部署到 Java 开发环境的类路径下。

编写 Java 代码调用 SPL 脚本 getRestData.splx:

public class RestDataQuery {
   
    public static void main(String[] args) {
   
        String driver = "com.esproc.jdbc.InternalDriver";
        String url = "jdbc:esproc:local://";
        try {
   
            Class.forName(driver);
            Connection conn = DriverManager.getConnection(url);
            PreparedStatement st =conn.prepareCall("call getRestData(?)");
            st.setObject(1, "Electronics");
            st.execute();
            ResultSet rs = st.getResultSet();
            System.out.println("order_id\torder_date\t\tcustomer\t\tamount");
            System.out.println("----------------------------------------------");
            while(rs.next()) {
   
                String orderId = rs.getString("order_id");
                String orderDate = rs.getString("order_date");
                String customer = rs.getString("customer");
                double amount = rs.getDouble("amount");
                System.out.printf("%-15s%-15s%-15s%.2f%n",orderId, orderDate, customer, amount);
            }
        } catch (Exception e) {
   
            throw new RuntimeException(e);
        }
    }
}

JDBC 的使用跟数据库完全一致,调用 SPL 脚本也与访问存储过程类似,这里是 call getRestData (?) 并传参。

下面是运行结果:

f296952a6dae16ecf8c6c2c4b76e363e_1744783207542100.png

总结一下,用 esProc 处理 Restful 接口的 json 数据,既能简化多层结构的解析和计算,又能轻松嵌入 Java 程序,可作为应用内计算引擎使用。

相关文章
|
17天前
|
机器学习/深度学习 JSON 监控
淘宝拍立淘按图搜索与商品详情API的JSON数据返回详解
通过调用taobao.item.get接口,获取商品标题、价格、销量、SKU、图片、属性、促销信息等全量数据。
|
5天前
|
JSON 缓存 自然语言处理
多语言实时数据微店商品详情API:技术实现与JSON数据解析指南
通过以上技术实现与解析指南,开发者可高效构建支持多语言的实时商品详情系统,满足全球化电商场景需求。
|
18天前
|
JSON API 数据格式
干货满满!淘宝商品详情数据,淘宝API(json数据返回)
淘宝商品详情 API 接口(如 taobao.item.get)的 JSON 数据返回示例如下
|
4天前
|
JSON API 数据安全/隐私保护
Python采集淘宝评论API接口及JSON数据返回全流程指南
Python采集淘宝评论API接口及JSON数据返回全流程指南
|
15天前
|
数据采集 JSON 数据挖掘
淘宝API对接系列:商品详情与评论数据分析(JSON数据返回)
1. 商品详情API(taobao.item.get) • 功能:获取商品基础信息(标题、价格、库存、销量)、图片、类目、促销信息等。
|
6天前
|
JSON 自然语言处理 API
多语言实时数据淘宝商品评论API:技术实现与JSON数据解析指南
淘宝商品评论多语言实时采集需结合官方API与后处理技术实现。建议优先通过地域站点适配获取本地化评论,辅以机器翻译完成多语言转换。在合规前提下,企业可构建多语言评论数据库,支撑全球化市场分析与产品优化。
|
12天前
|
机器学习/深度学习 JSON API
干货,淘宝拍立淘按图搜索,淘宝API(json数据返回)
淘宝拍立淘按图搜索API接口基于深度学习与计算机视觉技术,通过解析用户上传的商品图片,在淘宝商品库中实现毫秒级相似商品匹配,并以JSON格式返回商品标题、图片链接、价格、销量、相似度评分等详细信息。
|
13天前
|
JSON 算法 API
干货!电商API接口(淘宝商品评论)json数据返回
要获取淘宝商品评论的JSON数据,需通过淘宝开放平台的商品评论API接口实现。以下是详细步骤及代码示例
|
20天前
|
JSON 监控 API
淘宝商品评论API接口概述,json数据返回
淘宝商品评论API(如taobao.item.reviews.get)是淘宝开放平台提供的核心数据服务,支持开发者通过HTTP请求获取指定商品的评论数据,覆盖文字、图片、视频等多媒体内容,并支持筛选、分页、统计等高级功能
|
25天前
|
JSON API 数据格式
小红书笔记详情API,json数据返回
以下是一个模拟的小红书笔记详情的JSON数据返回示例,包含了笔记的基本信息、作者信息、内容、图片、标签以及互动数据(点赞、评论、收藏)等关键字段: