我正在使用带有快速解析器的node.js。我的输入json对象采用以下格式
{
ObjectA:
{
objectB : [
actions : [
{
conditions :
paramA: [
{
paramB: 45,
paramC: "00:01"
}
它很复杂且非常嵌套。当我在req.body中收到对象时,我会按以下格式获取它
ObjectA.ObjectB.actions.[conditions][paramA][0][paramB]
直到操作,它以漂亮的对象格式出现,但一旦达到条件,整个结构就会崩溃并将整个数据结构放在一个对象中。 使用express或node对嵌套对象有一些限制。
我知道这不是代码问题,因为如果我减少嵌套,一切正常。减少嵌套意味着直接在ObjectA下移动条件。
我使用以下命令配置服务器
app.use(logger('combined',{stream: expressLogFile}));
var customValidator = new CustomValidator();
app.use(bodyParser());
app.use(expressValidator({
customValidators: customValidator.validations
}));
app.use(methodOverride());
快递版: “表达”:“4.9.5”
当我从服务器端的req.body获取数据时会发生这种情况。 req.body数据看起来与我从客户端http POST请求传递的不同。
好的......确切的结构如下
{
content: {
f: {
z: 'b2a98061-9b3b-4ff6-8164-164892d369ad',
actions: {
myactions: [
{
name : 'My message actions1',
title : 'This is the title of my message.1',
message : 'Have a nice day.1',
conditions: {
condition1:
[
{
percentage: 45,
timeoutPeriod: "00:01"
}
],
condition2: [
{
start: "12/12/2014",
end: "14/12/2014"
}
],
condition3: [{
from: {
time: "10:00",
period: "am"
},
to: {
time: "2:00",
period: "pm"
}
}]
}
}
]
}
}
}
}
我希望来自req.body的数据格式为 content.f.action.myactions [0] .conditions.condition1 [0] .precentage 但我反感 content.f.action.myactions [0] “[条件] [条件1] [0] [PRECENTAGE]”
答案 0 :(得分:1)
我遇到过同样的问题,并且还怀疑nodejs服务器端的body-parser模块。就我而言,问题出在JSON生成方面。我过去常常将我的参数(直接javascript对象)作为数据发送而不指定内容类型。我改变了最初的原因:
registerHandlers($.ajax({
'url': "/api/" + name,
'type': 'POST',
'data': args
}), name, onSuccess, onFailure, onError);
通过以下内容:
registerHandlers($.ajax({
'url': "/api/" + name,
'type': 'POST',
'data': JSON.stringify(args),
'contentType': 'application/json'
}), name, onSuccess, onFailure, onError);
然后在另一端检索到JSON就好了。
答案 1 :(得分:1)
这由明确的urlEncoder控制。
在定义解析器时,请更改:
int err;
err = mpg123_format_none(m_handle);
std::cout << err << std::endl;
err = mpg123_format(m_handle,m_rate,m_channels, MPG123_ENC_FLOAT_32);
std::cout << err << std::endl;
...
if (mpg123_read(m_handle,
(unsigned char*)titi,
nb_framesToRead*mpg123_encsize(m_encoding),
&nb_framesRead) != MPG123_OK) {
std::cerr << mpg123_strerror(m_handle);
}
到
`app.use(express.urlencoded({ extended: false }));`
您可以在https://expressjs.com/en/resources/middleware/body-parser.html阅读更多信息,向下滚动到urlencoded部分。