Javascript 在Angular中作为http请求的一部分解析JSON字符串

Javascript 在Angular中作为http请求的一部分解析JSON字符串,javascript,angular,typescript,rxjs,Javascript,Angular,Typescript,Rxjs,我使用Angular中的BehaviorSubject获取一些事件数据并将其显示到页面。作为检索数据方法的一部分,我应用以下转换来解析存储在JSON字符串中的一些数据: return this.http .get(url) .map(response => { return response.json().data .map(ge => ge.data = JSON.parse(ge.details)); }); 应用程序检索对象,但看起来好像在呈现

我使用Angular中的BehaviorSubject获取一些事件数据并将其显示到页面。作为检索数据方法的一部分,我应用以下转换来解析存储在JSON字符串中的一些数据:

return this.http
  .get(url)
  .map(response => {
    return response.json().data
      .map(ge => ge.data = JSON.parse(ge.details));
  });
应用程序检索对象,但看起来好像在呈现页面后填充了数据属性。我有一些内容通过
*ngIf='ge.data'
有条件地显示,但不显示。但是,当我在过程中的各个点将对象记录到控制台时,data属性就会出现


我的问题归结为:解析存储为JSON字符串的数据以便在Angular应用程序中立即可用的最佳方法是什么?

问题不在于解析JSON。 问题是您正在发送一个ajax请求,并希望立即得到结果。 根据定义,处理ajax调用时不会阻止页面的呈现,并在完成时发出回调/返回承诺。
如果您想基于响应执行诸如更新图像之类的逻辑,您应该在ajax调用的回调中执行此逻辑,或者使用promise的
then()
方法执行此逻辑。

我怀疑第二个映射有语法问题,因为当我将第二个映射中的逻辑拉到它自己的方法中时,它似乎像我预期的那样工作,如下所示:

http.get(url)
  .map(response => response.json().data
    .map(this.decode));

decode(inData: dataObj): dataObj{
  inData.data = JSON.parse(inData.details);
  return inData;
}

请仔细阅读文档
response.json()?不实现json
json
;这是在,它似乎不涉及一个承诺。它是从
ResponseOptions
中获取的,它位于哪里。你可以使用类似
*ngIf=ge?.data
的东西。文档中的示例使用
response.json()。data
前面有一个
toPromise()
@torazaburo in,
toPromise
在返回的可观察对象上被调用,不在可观察对象发出的
响应上。承诺在可观察对象完成时解决-发出
响应
-此时身体可用
json()
是一个同步方法,返回解析后的正文。这是因为现在您实际返回的是绑定到模板的数据。您确实应该使用
subscribe()
函数来执行任何赋值或数据转换。