15еместо

0

голосов

JSONException !!!

Пишу проект на java. После подготовки данных создаётся Document[] из набора текстов и отправляется на ваш сервис для разметки. Получаю это:

com.mashape.unirest.http.exceptions.UnirestException: java.lang.RuntimeException: java.lang.RuntimeException: org.json.JSONException: A JSONArray text must start with '[' at 1 [character 2 line 1]
at com.mashape.unirest.http.HttpClientHelper.request(HttpClientHelper.java:146)
at com.mashape.unirest.request.BaseRequest.asJson(BaseRequest.java:68)
at com.textocat.api.sdk.EntityHttpService.queue(EntityHttpService.java:47)
at com.textocat.api.sdk.EntityRecognitionService$1.call(EntityRecognitionService.java:32)
at com.textocat.api.sdk.EntityRecognitionService$1.call(EntityRecognitionService.java:30)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.RuntimeException: java.lang.RuntimeException: org.json.JSONException: A JSONArray text must start with '[' at 1 [character 2 line 1]
at com.mashape.unirest.http.HttpResponse.<init>(HttpResponse.java:102)
at com.mashape.unirest.http.HttpClientHelper.request(HttpClientHelper.java:142)
... 8 more
Caused by: java.lang.RuntimeException: org.json.JSONException: A JSONArray text must start with '[' at 1 [character 2 line 1]
at com.mashape.unirest.http.JsonNode.<init>(JsonNode.java:51)
at com.mashape.unirest.http.HttpResponse.<init>(HttpResponse.java:93)
... 9 more
Caused by: org.json.JSONException: A JSONArray text must start with '[' at 1 [character 2 line 1]
at org.json.JSONTokener.syntaxError(JSONTokener.java:433)
at org.json.JSONArray.<init>(JSONArray.java:105)
at org.json.JSONArray.<init>(JSONArray.java:144)
at com.mashape.unirest.http.JsonNode.<init>(JsonNode.java:48)
... 10 more

Дмитрий, 28.06.2015, 15:45
Статус идеи: ожидает рассмотрения

Комментарии

Компания Textocat, 28.06.2015, 15:49
Похоже, что-то не то с файлом JSON, который отправляется на загрузку. Пришлите, пожалуйста, по возможности полный пример отправляемого файла.
Дмитрий, 28.06.2015, 15:57
Я не отправляю файлов напрямую. Я отправляю массив документов. Как это выглядит:

import java.util.List;

import com.google.common.util.concurrent.FutureCallback;
import com.textocat.api.sdk.EntityRecognition;
import com.textocat.api.sdk.TextocatFactory;
import com.textocat.api.sdk.model.AnnotatedBatch;
import com.textocat.api.sdk.model.Batch;
import com.textocat.api.sdk.model.BatchMetadata;
import com.textocat.api.sdk.model.Document;

public class DocumentAnnotator {
final EntityRecognition entityRecognition;

public DocumentAnnotator(String key) {
entityRecognition = TextocatFactory.getEntityRecognitionInstance(key);
}

public void annotate(List<String> data) {
final FutureCallback<AnnotatedBatch> outputCallback = new FutureCallback<AnnotatedBatch>() {
@Override
public void onSuccess(AnnotatedBatch result) {
StoreData.annotatedDocuments = result.getDocuments();
}

@Override
public void onFailure(Throwable t) {
t.printStackTrace();
}
};
FutureCallback<BatchMetadata> inputCallback = new FutureCallback<BatchMetadata>() {
@Override
public void onSuccess(BatchMetadata result) {
entityRecognition.retrieve(outputCallback, result);
}

@Override
public void onFailure(Throwable t) {
t.printStackTrace();
}
};
Document[] docs = new Document[data.size()];
for (int i = 0; i < data.size(); i++) {
docs\[i\] = new Document(data.get(i));
}
entityRecognition.submit(new Batch(docs), inputCallback);
}
}
Дмитрий, 28.06.2015, 15:57
Я не отправляю файлов напрямую. Я отправляю массив документов. Как это выглядит:

import java.util.List;

import com.google.common.util.concurrent.FutureCallback;
import com.textocat.api.sdk.EntityRecognition;
import com.textocat.api.sdk.TextocatFactory;
import com.textocat.api.sdk.model.AnnotatedBatch;
import com.textocat.api.sdk.model.Batch;
import com.textocat.api.sdk.model.BatchMetadata;
import com.textocat.api.sdk.model.Document;

public class DocumentAnnotator {
final EntityRecognition entityRecognition;

public DocumentAnnotator(String key) {
entityRecognition = TextocatFactory.getEntityRecognitionInstance(key);
}

public void annotate(List<String> data) {
final FutureCallback<AnnotatedBatch> outputCallback = new FutureCallback<AnnotatedBatch>() {
@Override
public void onSuccess(AnnotatedBatch result) {
StoreData.annotatedDocuments = result.getDocuments();
}

@Override
public void onFailure(Throwable t) {
t.printStackTrace();
}
};
FutureCallback<BatchMetadata> inputCallback = new FutureCallback<BatchMetadata>() {
@Override
public void onSuccess(BatchMetadata result) {
entityRecognition.retrieve(outputCallback, result);
}

@Override
public void onFailure(Throwable t) {
t.printStackTrace();
}
};
Document[] docs = new Document[data.size()];
for (int i = 0; i < data.size(); i++) {
docs\[i\] = new Document(data.get(i));
}
entityRecognition.submit(new Batch(docs), inputCallback);
}
}
Компания Textocat, 28.06.2015, 16:27
Похожая ошибка возникает, когда от сервера приходит ответ об ошибке. Поэтому:

1) Проверьте правильно ли вы передаете auth_token
2) Посмотрите в дебаггере, что приходит от сервера

К сожалению, мы пока не исправили реализацию, которая оборачивала бы эти ошибки в SDK более информативным исключением.
Дмитрий, 28.06.2015, 17:26
"Посмотрите в дебаггере, что приходит от сервера" - а как это посмотреть?

Оставить комментарий