Связь JSON между Java и Node.js

Мне нужно отправить 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)
    }

});

Что именно записывает console.info(request.body);? Вероятно, ваш JSON недействителен. Вы можете использовать jsonlint для проверки любой имеющейся строки json, когда у вас есть проблемы с JSON.parse ().

Shilly 08.06.2018 15:37

Что делает db.RequestArray?

bhspencer 08.06.2018 15:39

@Shilly console.info (request.body) печатает именно то поле ошибки, которое я вставил выше! Странно то, что класс для управления json в java - это sun! так что я не думаю, что в этом есть какие-то проблемы! Скорее всего дело в node.js!

riki 08.06.2018 15:41

@bhspencer Отправить объект json на маршрутизатор node.js (он создает httpurlconnection для маршрутизатора node.js)

riki 08.06.2018 16:11
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
4
587
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

В коде node.js вы пытаетесь проанализировать только первое свойство тела json запроса. Обычно правильный подход заключается в разборе всего тела запроса и последующей работе с полученным объектом. Не могли бы вы попробовать таким образом?

Вы могли бы объясниться лучше! То есть я печатаю весь запрос в начале и выбираю первый элемент массива для предварительного просмотра! Как мне это сделать?

riki 08.06.2018 15:54

В этой строке кода var data = JSON.parse(Object.keys(request.body)[0]); вы создаете массив только с ключами свойств объекта тела запроса, а затем анализируете первый из них. Подход, который я предлагаю, состоит в том, чтобы проанализировать все тело запроса (var data = JSON.parse(request.body);), а затем извлечь то, что вам нужно, из полученного объекта. Я предлагаю также лучше проверить ответ Элгайеда, потому что я думаю, что есть проблема также при создании json.

impe 08.06.2018 16:07

Итак, чтобы предотвратить массив, я должен сделать: var data = JSON.parse (request.body); ---- var art = date. статьи?

riki 08.06.2018 17:44
Ответ принят как подходящий

Вы переопределяете элементы массива 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

riki 08.06.2018 15:53

java.lang.StackOverflowError означает, что у вас есть бесконечный цикл или рекурсивный вызов без торможения, сначала исправьте условие выхода из цикла, оно должно быть i <Articoli.size () вместо i <= Articoli.size ()

Elgayed 08.06.2018 16:00

Я изменил Articoli.size (), но теперь у меня есть исключение: org.json.JSONException: конец ввода на символе 0 из

riki 08.06.2018 16:18

Вероятно, один из атрибутов элементов Articoli (Codice, Descrizione или Presso) является нулевым или пустым, вы можете добавить нулевые / пустые проверки для этих атрибутов, прежде чем добавлять их в json.

Elgayed 08.06.2018 16:24

Я проверяю товары Articoli, ни одно из них не является недействительным

riki 08.06.2018 16:44

Другие вопросы по теме