Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery ajax之后出现JSON格式错误_Javascript_Json - Fatal编程技术网

Javascript jQuery ajax之后出现JSON格式错误

Javascript jQuery ajax之后出现JSON格式错误,javascript,json,Javascript,Json,我通过jqueryajax调用从cordova应用程序接收nodejs应用程序上的数据,其格式为 { "network[msisdn]": "+254738XXXXXX", "network[country]": "ke", "network[roaming]": "false", "network[simState]": "Ready", "network[network]": "HSPA", "network[simSer

我通过jqueryajax调用从cordova应用程序接收nodejs应用程序上的数据,其格式为

{
     "network[msisdn]": "+254738XXXXXX",
      "network[country]": "ke",
      "network[roaming]": "false",
      "network[simState]": "Ready",
      "network[network]": "HSPA",
      "network[simSerial]": "89254031021032011310",
      "network[subscriber]": "639031023201131",
      "network[service]": "GSM"
}
而不是通常的

{
  network: {    
              "msisdn" : "",
               ...
           }
}
在访问嵌套键(如objectName.network.msisdn)时,我可以在cordova phone应用程序中循环对象,但一旦我在nodejs后端接收到数据,我就无法循环

我发布的数据如下所示

$.ajax({
         url: 'http://'+$scope.api.host+':'+$scope.api.port+'/notices',
         method: 'POST',
         dataType: 'json',
         data: $scope.storage.history[0]
      }).then(function(response){

          //! STORE THE RESULT IN THE RELEVANT OBJECT 
          $scope.storage.history[nextPos].locale = response;
          alert(JSON.stringify(response));

      }); 
我想从对象访问子键

在发布数据之前,我尝试过Json.Parse(Json.stringify(objectName))

我还尝试在jQuery ajax调用中不使用json数据类型发布

我尝试在后端解析JSON.parse()对象,但都没有用


非常感谢您的帮助。

如果您无法更改数据的返回方式,可以使用字符串表示法访问数据。这是一个使用字符串表示法的示例,也是一个函数,您可以使用它将其转换为嵌套对象,以便使用点表示法

var exampleData={
“网络[msisdn]:“+254738xxxxx”,
“网络[国家]”:“ke”,
“网络[漫游]:“false”,
“网络[simState]:“就绪”,
“网络[网络]:“HSPA”,
“网络[模拟串行]:“89254031021032011310”,
“网络[用户]:“639031023201131”,
“网络[服务]:“GSM”,
“simpleKey”:“simpleValue”
}
console.log(例如数据['network[country]]]);//原木->木料
//这将在适当的位置转换关键点
//可以修改它以返回新对象
功能键(数据){
变量块;
for(var输入数据){
if(data.hasOwnProperty(key)){
片段=键。匹配(/(.+)\[(.+)]/);
若有(件){
数据[pieces[1]]=数据[pieces[1]]| |{};
数据[件[1]][件[2]]=数据[键];
删除数据[键];
}
}
}
}
转换键(例如数据);
console.log(示例数据);

console.log(exampleData.network.simState);//Logs->Ready
我不明白,你需要这样格式化对象吗(
网络[msisdn]
)?感谢Ahmad Bamieh的关注,我需要将其格式化为network.msisdn,但我得到的是一个键为“network[msisdn]”的对象,而不是Thank@rdbya,你的解决方案工作正常,但一旦我用数据替换它,我发现错误:**data.hasOwnProperty不是函数**@rdbya,非常感谢。我用if(数据[key])和if(片段)替换了那行代码,从而解决了这个问题。。。防止简单键值对被操纵的验证。@ianmin2很高兴您能弄明白它。我更新了我的答案以包含您提到的更改。我刚刚发现我得到了“.hasownproperty”未定义错误,因为我使用了一个arrow函数作为父函数,并且默认情况下没有为它们分配原型。