gpt4 book ai didi

json - 如何使用 Alamofire 发布嵌套的 JSON?

转载 作者:行者123 更新时间:2023-11-28 16:01:18 25 4
gpt4 key购买 nike

我想用Alamofire(V3.5.1),我用的是Swift(V2.3)。我要发布的 JSON 是这个。

{
"inputs": [
{
"image": {
"dataType": 50,
"dataValue": "base64_image_string"
},
"configure": {
"dataType": 50,
"dataValue": "{\"side\":\"face\"}"
}
}
]
}

我尝试像这样制作 Alamofire 参数

    let parameters : [String: AnyObject] = [
"inputs" : [
[ "image":[
"dataType":50,
"dataValue":(base64String)
],
"configure":[
"dataTpye":50,
"dataValue": ["side" :"face"]
]
]
]
]

但是我得到的结果是这样的。 失败:Error Domain=NSCocoaErrorDomain Code=3840 “字符 0 周围的值无效。

Q1:如何在正文中POST一个正确的嵌套json?

编辑:我尝试使用@Zonily Jame 的方法来创建 JSON 对象,但失败了。这是我的代码:

        let imageData:[String:AnyObject] = ["dataType":50, "dataValue":"string"]
let configureData:[String:AnyObject] = ["dataType":50, "dataValue":"{\"side\":\"face\"}"]
let inputsData:[String:AnyObject] = ["image":dictToJSON(imageData) , "configure":dictToJSON(configureData)]
let parameters:[String:AnyObject] = ["inputs":dictToJSON(inputsData)]

然后我打印了如下所示的 parameters 变量:

["inputs": {
configure = {
dataType = 50;
dataValue = {
side = face;
};
};
image = {
dataType = 50;
dataValue = "";
};
}]

不知何故语法仍然不正确。而且我还尝试在变量 configureData 上使用 dictToJSON(),我仍然得到相同的结果。


预期的响应应该是

  {
"outputs": [
{
"outputLabel": "ocr_id",
"outputMulti": {},
"outputValue": {
"dataType": 50,
"dataValue": "{\"address\": \"string\", \"config_str\" : \"{\"side\":\"face\"}\", \"name\" : \"Jack\",\"num\" : \"1234567890\", \"success\" : true}"
}
}
]
}

编辑:这是关于如何在 JAVA 中表达响应的 API 文档

try {
JSONObject resultObj = new JSONObject(result);
JSONArray outputArray = resultObj.getJSONArray("outputs");
String output = outputArray.getJSONObject(0).getJSONObject("outputValue").getString("dataValue");
JSONObject out = new JSONObject(output);
if (out.getBoolean("success")) {
String addr = out.getString("address");
String name = out.getString("name");
String num = out.getString("num");
System.out.printf(" name : %s \n num : %s\n address : %s\n", name, num, addr);
} else {
System.out.println("predict error");
}
} catch (JSONException e) {
e.printStackTrace();
}

和请求码

public static JSONObject getParam(int type, JSONObject dataValue) {
JSONObject obj = new JSONObject();
try {
obj.put("dataType", type);
obj.put("dataValue", dataValue);
} catch (JSONException e) {
e.printStackTrace();
}
return obj;
}


public static JSONObject getParam(int type, String dataValue) {
JSONObject obj = new JSONObject();
try {
obj.put("dataType", type);
obj.put("dataValue", dataValue);
} catch (JSONException e) {
e.printStackTrace();
}
return obj;
}

JSONObject requestObj = new JSONObject();
try {
JSONObject configObj = new JSONObject();
JSONObject obj = new JSONObject();
JSONArray inputArray = new JSONArray();
configObj.put("side", configStr);
obj.put("image", getParam(50, imgBase64));
obj.put("configure", getParam(50, configObj.toString()));
inputArray.put(obj);
requestObj.put("inputs", inputArray);
} catch (JSONException e) {
e.printStackTrace();
}
String body = requestObj.toString();

注意:imgBase64是一个字符串。

Q2:如何解析这种JSON?我只想要 dataValue,谢谢

最佳答案

你可以给出嵌套字典的字典类型,或者你可以为每个需要字典的键制作单独的字典。像 [AnyObject: AnyObject] 。

对于键的分析,您可以将响应转换为字典形式并使用其方法 valueforKeyPath

关于json - 如何使用 Alamofire 发布嵌套的 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41034131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com