如何从数组中的JSON数组中获取元素

时间:2019-08-15 13:24:37

标签: arrays json typescript nativescript

我对这个JSON有疑问。如何从这里获取坐标?

我尝试像下面的代码一样使用for(){},但是不起作用。

   item {
        "type": "type1",
        "features": [{
                "type": "typeee1",
                "geometry": {
                    "type": "Point",
                    "coordinates": [
                        -19.726330999999998,
                        41.360610000000001
                    ]},
                "properties": {
                    "id_strada": "1433",
                    "nome_strada": "test3",
                } },
            {
                "type": "typeee2",
                "geometry": {
                    "type": "Point",
                    "coordinates": [
                        19.726344999999998,
                        26.36063
                    ] },
                "properties": {
                   id_strada": "13",
                   "nome_strada": "test5",
                } },
            {
                "type": "typeee3",
                "geometry": {
                    "type": "Point",
                    "coordinates": [
                        19.726358999999999,
                        98.36065
                    ] },
                "properties": {
                  id_strada": "14",
                    "nome_strada": "test34",
                } }, {
                "type": "typeee5",
                "geometry": {
                    "type": "Point",
                    "coordinates": [
                        19.726372999999999,
                        55.360669999999999
                    ] },
                "properties": {
                    id_strada": "14335",
                    "nome_strada": "test39",
                } }],
        "last_update": "15-08-2019 15:04:45"
    }

调用JSON的函数如下所示。

item: Item[];
        this.ws.getitems().subscribe(
                item => {
                    this.item = item;
                    console.log('this.item.length', this.item.length)
                    for (let i = 0; i < this.item.length; i++) {        
                    }
                }
            );
  

this.item.length未定义

我的问题是,如何在此处获取坐标?

你能问我任何想法吗? 谢谢!

2 个答案:

答案 0 :(得分:0)

在数组中的数组中没有数组。在对象中的对象中有一个对象中的数组。


interface Feature {
  type: string;
  geometry: {
    type: string;
    coordinates: [ number, number ];
  };
  properties: {
    id_strada: string;
    nome_strada: string;
  };
}

interface Item {
  type: string;
  features: Feature[];
  last_update: string;
}

const items$: Observable<Item> = this.ws.getItems();
const coordinates$: Observable<[number, number]> = items$.pipe(
  switchMap((item: Item) => of(
    ...item.features.map((feature: Feature) => feature.geometry.coordinates)
  )),
);

coordinates$.subscribe((coordinates: [number, number]) => console.log(coordinates));

目前还不清楚您的意图是什么。您的Item对象中有多个坐标。您是要链接所有坐标还是仅链接第一个坐标,还是要按要素拆分它们?我为您提供了一种方法,使您收到的所有坐标都保持不链接状态。您必须弄清楚该怎么做。

答案 1 :(得分:0)

如果您已经在item中,则坐标位于item.geometry.coordinates

如果提供的json是x,则可以在x.features[0].geometry.coordinates获得第一个坐标。

您可以通过以下方式找到每组坐标:

x.features.forEach(item => {
  let coords = item.geometry.coordinates
  // do something with coords
})