【问题标题】:Angular convert JSON into KeyValue pairAngular 将 JSON 转换为键值对
【发布时间】:2019-05-24 20:45:30
【问题描述】:

我正在尝试将我的 JSON 数据转换为 KeyValue 数组,以便将其分配给 p-dropdown 组件的选项,但由于某种原因,我无法在数据上调用 JSON.parse()

key-value.ts

export interface KeyValue {
    text: string;
    value: string;
}

domains.json

{
  "Domains": [
    {"North America (NAM)": "NAM"}, 
    {"Europe (EUR)": "EUR"}, 
    {"Australia (AUS)": "AUS"}, 
    {"Latin America (LAAM)": "LAAM"}, 
    {"Asia (APA)": "APA"}
  ]
}

domains.service.ts

getDomains(): any {
  return this.getJSON().subscribe(data => {
    console.log("JSON data.Domains: " + JSON.stringify(data.Domains)); //See >> output
    let sids: KeyValue[] = JSON.parse(data.Domains); // See >> exception
    return data.Domains;
  });
}

getJSON(): Observable<any> {
  return this.http.get("assets/dd.json")
}

>> 输出

JSON data.Domains: [{"North America (NAM)":"NAM"},{"Europe (EUR)":"EUR"},{"Australia (AUS)":"AUS"},{"Latin America (LAAM)":"LAAM"},{"Asia (APA)":"APA"}]

>>异常

core.js:1449 错误语法错误:JSON 中的意外标记 o 在位置 1 在 JSON.parse() 在 SafeSubscriber.eval [as _next] (utilitynet.service.ts:25) 在 SafeSubscriber.__tryOrUnsub (Subscriber.js:243) 在 SafeSubscriber.next (Subscriber.js:190) 在 Subscriber._next (Subscriber.js:131) 在 Subscriber.next (Subscriber.js:95) 在 MapSubscriber._next (map.js:85) 在 MapSubscriber.Subscriber.next (Subscriber.js:95) 在 FilterSubscriber._next (filter.js:90) 在 FilterSubscriber.Subscriber.next (Subscriber.js:95)

【问题讨论】:

    标签: json angular


    【解决方案1】:

    data.Domains 已经是一个 JS 对象。所以你不需要调用JSON.parse就可以了。

    做吧

    let sids: KeyValue[] = data.Domains;
    

    另外,我假设getDomains() 是您将从组件调用并仅在其中订阅它的方法。

    所以只需像这样重构你的代码:

    import { map } from 'rxjs/operators';
    
    ...
    
    getDomains(): any {
      return this.getJSON().pipe(
        map(data => data.Domains)
      );
    }
    
    ...
    
    getJSON(): Observable < any > {
      return this.http.get("assets/dd.json")
    }
    

    然后你可以像这样在你的组件中使用它:

    this.domainsservice.getDomains()
      .subscribe(domains => {
        console.log(domains);
        ...
      });
    

    【讨论】:

    • @AK47 刚刚更新了答案,说明您将如何使用它来获取组件中的实际域值。
    猜你喜欢
    • 2020-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-15
    • 2013-05-03
    • 1970-01-01
    • 2018-02-20
    • 2020-01-25
    相关资源
    最近更新 更多