Я хочу использовать Alamofire (V3.5.1), и я использую Swift (V2.3). JSON, я хочу опубликовать это.Как POST вложенный JSON с использованием Alamofire?
{
"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"]
]
]
]
]
Но результат я получаю это. FAILURE: Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0.
Q1: Как я могу отправить POST правильный вложенный json в тело?
EDIT: Я попытался использовать способ @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 = "";
};
}]
Каким-то синтаксис является неверным. И я также попытался использовать dictToJSON()
по переменной configureData
, я все равно получил тот же результат.
ожидаемый ответ должен быть
{
"outputs": [
{
"outputLabel": "ocr_id",
"outputMulti": {},
"outputValue": {
"dataType": 50,
"dataValue": "{\"address\": \"string\", \"config_str\" : \"{\"side\":\"face\"}\", \"name\" : \"Jack\",\"num\" : \"1234567890\", \"success\" : true}"
}
}
]
}
EDIT: Это документ в API, о том, как фраза ответа, но в JAVA
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
, спасибо
Вы можете разместить свои коды Alamofire? ** Примечание: ** вы можете скрыть URL-адрес при необходимости mate –
Параметры, которые вы получили, были правильными imo, в вашем 'api' вы уверены, что сервер создан для приема параметров' application/json' параметров? Я не понимаю, что вы имеете в виду после того, как «И я хочу получить ответ», можете ли вы перефразировать? –
@ZonilyJame Я имею в виду, что сервер даст мне этот ответ, это правильный пример в документе API. И я использую этот метод Alamofire 'Alamofire.request (.POST, url, Параметры: параметры, кодировка: .JSON , заголовки: заголовки) .responseJSON ' – Shucheng