Javascript Java和Node.js之间的JSON通信
我必须从java向node.js发送一个json!要执行此操作,请使用以下代码!json由一个注释字段和一个特定类型的数组组成!事实上,当我在node.js中打印值时,我出现了下面的错误。你能给我解释一下,我怎样才能得到这些值从node.js中的JSON?奇怪的是,note字段甚至没有打印出来 错误:Javascript Java和Node.js之间的JSON通信,javascript,java,node.js,express,router,Javascript,Java,Node.js,Express,Router,我必须从java向node.js发送一个json!要执行此操作,请使用以下代码!json由一个注释字段和一个特定类型的数组组成!事实上,当我在node.js中打印值时,我出现了下面的错误。你能给我解释一下,我怎样才能得到这些值从node.js中的JSON?奇怪的是,note字段甚至没有打印出来 错误: { '{"Articoli":': { '"SADRIN 830","8 RAGGI DOPPI 8TX 8RX - ALTEZZA 3,00 MT","232.0"': '' } }
{ '{"Articoli":':
{ '"SADRIN 830","8 RAGGI DOPPI 8TX 8RX - ALTEZZA 3,00 MT","232.0"': '' } }
SyntaxError: Unexpected end of JSON input at JSON.parse (<anonymous>)
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);
}
app.post("/rapportini/generarapportino",async function(request,response)
{
try
{
console.log(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.log("Errore generazione rapportino ",err)
}
});
在node.js代码中,您试图只解析请求json正文的第一个属性。通常正确的方法是解析整个请求体,然后处理结果对象。您可以这样尝试吗?您正在覆盖for循环中的json数组项,因此最终您将只拥有上一个Articoli的属性,尝试为每个Articoli项创建一个json对象并将其放入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);
什么是
console.log(request.body)代码>准确记录?您的JSON可能无效。当json.parse()出现问题时,您可以使用jsonlint验证任何json字符串。db.RequestArray做什么?@Shilly console.log(request.body)精确打印我在上面插入的错误字段!奇怪的是,java中用于管理json的类是sun!所以我不认为这有任何问题!很可能是关于node.js的@bhspencer向node.js的路由器发送一个json对象(它会生成一个到node.js路由器的httpurlconnection)我尝试了你的解决方案:当java循环执行时,它会引发这个异常:java.lang.StackOverflower溢出,因为应用程序运行在androidjava.lang.StackOverflower上,这意味着你有一个无限循环或未阻止的递归调用,首先修复循环退出条件,它应该是iI have change Articoli.size(),但现在我有一个例外:org.json.JSONException:输入结束时,可能有一个Articoli items属性(Codice、descripione或Presso)的字符0为null或空,在将这些属性添加到jsonI check Articoli项目之前,您可以在这些属性上添加null/empty check,它们中没有一个是null或VOIDE。您可以更好地解释自己!也就是说,我在开始时打印整个请求,并选择要预览的数组的第一个元素!我应该怎么做?在这行代码中var data=JSON.parse(Object.keys(request.body)[0])代码>您正在创建一个仅包含请求主体对象的属性键的数组,然后解析其中的第一个。我建议的方法是解析整个请求体(var data=JSON.parse(request.body);
),然后从结果对象中提取所需的内容。我还建议最好检查Elgayed的答案,因为我认为在构建json时也存在一些问题var art=日期。文章?
{
"Note": "some note",
"Articoli":[{
"Codice": "CodiceValue 1",
"Descrizione": "DescrizioneValue 1",
"Presso": "Prezzo 1"
},
{
"Codice": "CodiceValue 2",
"Descrizione": "DescrizioneValue 2",
"Presso": "Prezzo 2"
}]
}