明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 73|回复: 1

[讨论] 混合编程操作json数据

[复制链接]
发表于 3 小时前 | 显示全部楼层 |阅读模式
本帖最后由 vitalgg 于 2025-5-19 12:15 编辑

#+title:混合编程操作json数据

* 背景

JSON数据格式已成为大多数编程语言的内置的数据格式。它可以方便地在所使用的语言中的对象及数据和字符串之间进行转化。

autolisp本身没有对象。但是有点对表,列表。这种格式与json非常相似。但是Autolisp中的整数和浮点数精度及范围有限,在相互转化时数值类型的数据会失真。

为了保持数据的一致性。我们可以调用外部程序进行处理,如python。

windows下的大多数CAD支持visuallisp,现在就用 winhttp.httprequest 做为中介让autolisp与python进行交互编程。

* 服务端

jsonserver.py 内容:
#+begin_src python
  1.     from flask import  Flask,jsonify,request
  2.     import json
  3.     jsonobj = {};
  4.     app = Flask(__name__)
  5.     @app.route('/api/json',methods=['GET'])
  6.     def get_json():
  7.         global jsonobj
  8.         return json.dumps(jsonobj)

  9.     @app.route('/api/json',methods=['POST'])
  10.     def init_json():
  11.         global jsonobj
  12.         jsonobj = request.json;
  13.    
  14.         return json.dumps(jsonobj)

  15.     @app.route('/api/json_set',methods=['POST'])
  16.     def set_json():
  17.         global jsonobj
  18.         data = request.json;
  19.         for key in data:
  20.             jsonobj[key] = data[key]
  21.         return json.dumps(jsonobj)

  22.     if __name__ == '__main__':
  23.         app.run(debug=True)


#+end_src

安装python及需要的包
#+begin_src shell
  winget install python.python.3.13
  pip install flask
#+end_src

运行服务端
#+begin_src shell
  python jsonserver.py
#+end_src

* 客户端

@lisp 内置了 http 交互函数,可以用 @::@get , @::postjson 与服务端进行交互。
没有安装 @lisp的可以执行以下代码,网络加载需要的函数。
  1. (progn(vl-load-com)(setq s strcat h"http"o(vlax-create-object (s"win"h".win"h"request.5.1"))v vlax-invoke e eval r read)(v o'open "get" (s h"://""atlisp.""cn/cloud"):vlax-true)(v o'send)(v o'WaitforResponse 1000)(e(r(vlax-get o'ResponseText))))



默认端口是5000,你也可以修改,只要保证服务端与客户端一致就可以了。

** 初始化json对象

#+begin_src lisp
  
  1. (@::postjson "http://localhost:5000/api/json" "{\"k1\":\"v1\",\"k2\":\"v2\",\"k3\":\"v3\"}")


设置键值

  1. (@::postjson "http://localhost:5000/api/json_set" "{\"k1\":\"aaa\"}")


取 json,当然上面的设置后也会直接返回结果

  1. (@::@get "http://localhost:5000/api/json")



原文:https://gitee.com/atlisp/atlisp- ... 8D%E4%BD%9Cjson.org

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
"觉得好,就打赏"
还没有人打赏,支持一下
回复

使用道具 举报

 楼主| 发表于 1 小时前 | 显示全部楼层
CAD命令行不能输入太长的字符串,我们写成 lsp  文件。



加载:(load "test/json")

初始化 json 字串为 json对象
(@::postjson "http://localhost:5000/api/json" jsonstr)



设置某个键值。如Ttile , WedmType

(@::postjson "http://localhost:5000/api/json_set" "{\"Title\":\"ABCD\", \"WedmType\":  2}")



提交的键值替换成了新值。并且长整数能保持原值。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-19 13:55 , Processed in 0.188415 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表