【发布时间】:2015-05-12 00:08:50
【问题描述】:
好吧,我一直在痛打这个:
我从服务器返回以下 JSON:
{
"SendDate" : "2015-03-16T22:48:27.747",
"SendTo" : {
"ContactIds" : ["28a24538-cdfc-4453-920d-86f57d7eaf22"],
"GroupIds" : []
},
"Message" : "MEETING TIME!!!!!"
}
我已经用几个 REST 客户端检查了这个 - 这就是返回的结果。
我有 AngularJS 通过 $http.get() 操作“获取”它,但我在“ContactIds”值上得到一个未定义的值 - 所以,我在 JS 控制台中看到的是:
SendDate : "2015-03-16T22:48:27.747"
SendTo:
ContactIds: Array[1]
0: undefined
length: 1
我不知道是什么原因造成的。
有什么想法吗?
更新: 我附加了一个拦截器并拦截了响应,当我将数据提供给控制台时结果是相同的 - 但是当我使用时:
JSON.stringify(数据)
我可以看到数组中的数据在那里!
更新 2:
好的,现在这让我发疯了。我玩过拦截器,如果我对响应进行字符串化然后使用 JSON.parse() - 它工作正常,但是当我通过响应时,它又搞砸了。
我通过 Angular 的解析过程一直追踪到“fromJson()”函数。 (下面的代码:)它作为字符串进入函数。 (现在是 Bizzarro 部分)
我修改了这样的代码:
function fromJson(json) {
var obj1 = JSON.parse(json);
console.log("Obj1:");
console.log(obj1);
//my altered angular code
var obj2 = isString(json) ? JSON.parse(json) : json;
console.log("Obj2:");
console.log(obj2);
// Pass to program...
return obj1;
//return obj2;
/* original angular code:
return isString(json)
? JSON.parse(json)
: json;
*/
}
如果我运行它并返回 obj1,控制台会将 obj1 的 ContactIds“0”索引记录为“未定义” - 但 obj2 记录为“28a24538-cdfc-4453-920d-86f57d7eaf22”。
“太棒了!”,我在想 - 所以我返回 obj2,但现在它记录未定义但 obj1 的“0”索引现在是正确的值。 (什么?)
所以我反转代码,只是为了看看,然后返回 obj1 - 我会被诅咒的 - obj2 返回“28a24538-cdfc-4453-920d-86f57d7eaf22”并且 obj1 是未定义的。 (就像在逗猴子一样。)
它必须是稍后在管道中执行它的东西 - 或者 - 它可能与作为 GUID 字符串的数组有关 - 但我在其他地方使用 GUID 字符串没有问题。
这也可能是另一个我不知道的“角度过程”导致了这种情况 - 角度令人印象深刻。
不管怎样,我都超级困惑。
这太愚蠢了——我很惊讶字符串数组如此困难——更糟糕的是,我似乎是唯一一个遇到这个问题的人。 (我昨天研究了六个小时......)
各位,还有什么想法吗?
【问题讨论】:
-
你能说明如何处理
$http.get()的结果吗? -
检查浏览器控制台网络选项卡中的实际请求以查看实际收到的内容。显示更多代码
-
您是否在响应对象上使用了 angular.copy?当我想克隆的对象中有一个 uuid 字符串时,我遇到了这个函数的问题......不要问我为什么,我只是切换到 JSON.parse/JSON.stringify (反正更快)
-
是的,$http.get() 非常简单——它只是 $http.get(
)。至于网络浏览器 - 我确实向您展示了代码。JSON 字符串是我得到的。至于显示更多代码——我是代码的极简主义者——我已经向你展示了我所拥有的。不,我没有使用 angular.copy() - 我使用的是 angularJS 1.4 开箱即用的所有内容。好主意-谢谢分享! :)
标签: arrays json angularjs string parsing