Json对象变得扁平了

时间:2014-10-13 02:52:26

标签: javascript json node.js express

我正在使用带有快速解析器的nod​​e.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]”

2 个答案:

答案 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部分。