AngularJS将递归JSON解析为对象数组

Posted

技术标签:

【中文标题】AngularJS将递归JSON解析为对象数组【英文标题】:AngularJS parsing recursive JSON into object array 【发布时间】:2020-02-27 03:43:42 【问题描述】:

我一直在使用 AngularJS 1.7 并从后端获取对象以进行过滤时遇到问题。也就是说,我收到了一个由相同对象组成的 JSON,但有些是其他对象的子对象,例如:

[
    
        "id":2,
        "type":"CORP",
        "description":"A-corpus",
        "children": [
            
                "id":3,
                "type":"FLOOR",
                "description":"1st floor",
                "children":[] ]
             
         ]
     
]

这些对象都是 Place 类型的。我事先不知道 JSON 的深度,必须递归地通过它来获取所有地方的列表。为此,我创建了一个名为 place.ts 的相应对象:

export class Place 
  constructor(
    public id: Number,
    public type: String,
    public description: String,
    public children: Array<Place>) 


@Injectable(
  providedIn: 'root'
)
export class placeAdapter implements Adapter<Place> 
  adapt(item: any): Place 
    return new Place(
      item.id,
      item.type,
      item.description,
      item.children
    );
  

适配器是来自Consuming APIs in Angular: The Model-Adapter Pattern 的设计模式,它适用于从后端接收其他项目。此外,我还有名为 place.service.ts 的服务打字稿:

export class PlaceService 

  constructor(private http: HttpClient, private adapter: placeAdapter) 

  public query(): Observable<Place[]> 
    return this.http.get('api/places').pipe(
      map((data:any[]) => 
        console.log("place by type:" + data);
        return data.map(item => this.adapter.adapt(item));
      ));
  

这个设计确实从其他端点读取了一些嵌套项,但是当我尝试接收这些对象时进入了无限循环。它反复输出到控制台的对象是:

按类型放置:[object Object],[object Object]

即使我给它一个没有子位置的 JSON。 IntelliJ 向我展示了对同一个地方和他们的孩子的无尽请求。无论 JSON 有多少嵌套项,解析都会进入一个循环,我什么也得不到,因为循环会导致整个应用程序运行得太慢。

如何使用最佳实践在 AngularJS 中将此类递归 JSON 解析为对象数组?

【问题讨论】:

适配器模式看起来像是一种应用简单纯函数的复杂方式,当您可以导入纯函数并在映射中使用它时,无需依赖注入适配器。我不会让这种模式污染我的项目。 您可能是对的,但这不是问题的根源。不过,我想我可能已经找到了! 【参考方案1】:

发现问题。这些对象确实可以使用,并且循环不是我发布的代码的错误。这是我试图获取数据的 Angular 组件ng-multiselect-dropdown 的错误(它调用了查询地点列表的方法)。经过一番研究,事实证明该组件不支持动态内容,因此它或 Angular 本身不断重复 GET 请求。

经过一些变通方法后,该组件现在可以接受动态内容,并且我可以使用我之前发布的代码访问位置对象。

【讨论】:

以上是关于AngularJS将递归JSON解析为对象数组的主要内容,如果未能解决你的问题,请参考以下文章

递归解析 JSON

将 JSON 数组解析为对象集合

如何使用 Newtonsoft.Json 将包含数组数组的 json 对象解析为 C# 中的对象列表?

将 JSON 字符串解析为对象数组 Objective C

如何通过改造将数组嵌套对象 Json 解析为 Kotlin?

Javascript/Json:对象的对象转换为关联数组