Мне нужно отправить json с java на node.js! Для этого используйте приведенные ниже коды! JSON состоит из одного поля Примечание и массива определенного типа Статья! Дело в том, что когда я печатаю значение в node.js, у меня появляется ошибка ниже. Не могли бы вы объяснить мне, как я могу получить значения из JSON внутри node.js? Странно то, что поле заметки даже не печатается
Ошибка:
{ '{"Articoli":':
{ '"SADRIN 830","8 RAGGI DOPPI 8TX 8RX - ALTEZZA 3,00 MT","232.0"': '' } }
SyntaxError: Unexpected end of JSON input at JSON.parse (<anonymous>)
Код Java:
JSONObject obj = new JSONObject();
obj.put("Note", note);
JSONArray objArticoli=new JSONArray();
for(int i=0; i<=Articoli.size(); i++)
{
objArticoli.put(0,""+Articoli.get(i).GetCodice());
objArticoli.put(1,""+Articoli.get(i).GetDescrizione());
objArticoli.put(2,""+Articoli.get(i).GetPrezzo());
}
obj.put("Articoli",objArticoli);
try {
Database db = new Database();
ret = db.RequestArray("/rapportini/generarapportino", obj,true);
} catch (Exception ex) {
System.out.println("\n Error"+ex);
}
Node.js:
app.post("/rapportini/generarapportino",async function(request,response)
{
try
{
console.info(request.body);
var data = JSON.parse(Object.keys(request.body)[0]);
const ret=await RapportiniController.GeneraRapportino(data.Note);
response.setHeader('Content-Type', 'application/json');
response.send(JSON.stringify({ return: ret }));
}
catch(err){
console.info("Errore generazione rapportino ",err)
}
});
Что делает db.RequestArray?
@Shilly console.info (request.body) печатает именно то поле ошибки, которое я вставил выше! Странно то, что класс для управления json в java - это sun! так что я не думаю, что в этом есть какие-то проблемы! Скорее всего дело в node.js!
@bhspencer Отправить объект json на маршрутизатор node.js (он создает httpurlconnection для маршрутизатора node.js)



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


В коде node.js вы пытаетесь проанализировать только первое свойство тела json запроса. Обычно правильный подход заключается в разборе всего тела запроса и последующей работе с полученным объектом. Не могли бы вы попробовать таким образом?
Вы могли бы объясниться лучше! То есть я печатаю весь запрос в начале и выбираю первый элемент массива для предварительного просмотра! Как мне это сделать?
В этой строке кода var data = JSON.parse(Object.keys(request.body)[0]); вы создаете массив только с ключами свойств объекта тела запроса, а затем анализируете первый из них. Подход, который я предлагаю, состоит в том, чтобы проанализировать все тело запроса (var data = JSON.parse(request.body);), а затем извлечь то, что вам нужно, из полученного объекта. Я предлагаю также лучше проверить ответ Элгайеда, потому что я думаю, что есть проблема также при создании json.
Итак, чтобы предотвратить массив, я должен сделать: var data = JSON.parse (request.body); ---- var art = date. статьи?
Вы переопределяете элементы массива json в своем цикле for, поэтому в конце у вас будут только атрибуты из последнего Articoli, попробуйте создать объект json для каждого элемента Articoli и поместить его в массив json
JSONObject obj = new JSONObject();
obj.put("Note", note);
JSONArray objArticoli=new JSONArray();
for(int i=0; i<Articoli.size(); i++)
{
JSONObject articloliItem = new JSONObject();
articloliItem.put("Codice", Articoli.get(i).GetCodice());
articloliItem.put("Descrizione", Articoli.get(i).GetDescrizione());
articloliItem.put("Prezzo", Articoli.get(i).GetPrezzo());
objArticoli.put(articloliItem);
}
obj.put("Articoli",objArticoli);
Это приведет к тому, что объект json будет иметь следующую структуру
{
"Note": "some note",
"Articoli":[{
"Codice": "CodiceValue 1",
"Descrizione": "DescrizioneValue 1",
"Presso": "Prezzo 1"
},
{
"Codice": "CodiceValue 2",
"Descrizione": "DescrizioneValue 2",
"Presso": "Prezzo 2"
}]
}
Я пробовал ваше решение: при выполнении цикла java возникает это исключение: java.lang.StackOverflowError переполняется, поскольку приложение работает на android
java.lang.StackOverflowError означает, что у вас есть бесконечный цикл или рекурсивный вызов без торможения, сначала исправьте условие выхода из цикла, оно должно быть i <Articoli.size () вместо i <= Articoli.size ()
Я изменил Articoli.size (), но теперь у меня есть исключение: org.json.JSONException: конец ввода на символе 0 из
Вероятно, один из атрибутов элементов Articoli (Codice, Descrizione или Presso) является нулевым или пустым, вы можете добавить нулевые / пустые проверки для этих атрибутов, прежде чем добавлять их в json.
Я проверяю товары Articoli, ни одно из них не является недействительным
Что именно записывает
console.info(request.body);? Вероятно, ваш JSON недействителен. Вы можете использовать jsonlint для проверки любой имеющейся строки json, когда у вас есть проблемы с JSON.parse ().