当输入是 JSON 时在 Julia 中发布 API

问题描述 投票:0回答:1

我正在尝试访问 TexSmart HTTP API https://ai.tencent.com/ailab/nlp/texsmart/en/api.html,其中输入文本是与以下结构匹配的字典:

Dict("str" => "text you want to analyze",
     "options"=> Dict(      "input_spec"=>Dict("lang"=>"auto"),
                              "word_seg"=>Dict("enable"=>true),
                           "pos_tagging"=>Dict("enable"=>true,
                                          "alg"=>"log_linear"),
                                   "ner"=>Dict("enable"=>true,
                                          "alg"=>"fine.std"),
                     "syntactic_parsing"=>Dict("enable"=>false),
                                   "srl"=>Dict("enable"=>false)),
      "echo_data"=>Dict("request_id"=>12345)
                     )

“选项”和“echo_data”字段是可选的,可能对我的实现并不重要,因此请随意将它们排除在答案之外。

我如何在 HTTP.request 中提交这个?


基于API页面上的Python示例,我尝试了以下方法:

HTTP.request("POST", "https://texsmart.qq.com/api", 
[codeunits(json(Dict("str"=>"He stayed in San Francisco.")))])

我没有收到回复,我也不知道为什么。以下是 API 文档中的 Python 示例:

import json
import requests
obj = {"str": "he stayed in San Francisco."}
req_str = json.dumps(obj).encode()
url = "https://texsmart.qq.com/api"
r = requests.post(url, data=req_str)
r.encoding = "utf-8"
print(r.text)

由于

json.dumps().encode()
函数返回
bytes
,我认为
codeunits()
包装输入字符串的 json 表示可以解决问题,但仍然没有任何效果。我没有收到错误,只是收到内容长度为 0 的响应。


注意:如果有人知道使用

PyCall
ccall()
执行此操作的方法,该答案也对我有用!

json http julia pycall
1个回答
1
投票

以下应该有效:

import HTTP, JSON
HTTP.request(
    "POST",
    "https://texsmart.qq.com/api",
    [],
    JSON.json(Dict("str"=>"He stayed in San Francisco."))
)

特别是:

© www.soinside.com 2019 - 2024. All rights reserved.