【问题标题】:How to count json data item ionic2如何计算json数据项ionic2
【发布时间】:2017-01-21 11:12:25
【问题描述】:

我发现了一个新问题, 我想数@NAME 设置数组FACET[] 用于显示@KEY

我的json

  "    RESULT":{
              "FACET":[
                { "@NAME" : "creator", 
                  "@COUNT" : "20",
                  "FACET_VALUES":[
                    {
                      "@KEY":"Book Company1",
                      "@VALUE":"13"},
                    {
                      "@KEY":"Book Company1์",
                      "@VALUE":"10"}],
                { "@NAME" : "lang", 
                  "@COUNT" : "70",
                  "FACET_VALUES":[
                    {
                      "@KEY":"tha",
                      "@VALUE":"33"},
                    {
                      "@KEY":"eng",
                      "@VALUE":"42"}
                   ],
                { "@NAME" : "bnb", 
                  "@COUNT" : "64",
                  "FACET_VALUES":[
                    {
                         .
                         .
                         .

              ] 

.

     optionsFn(): void {
            this.http.get("my_url")
                        .subscribe(data =>{
                                 this.date=data.json().RESULT.FACET; //get @NAME
                        },error=>{
err => console.error(err),
                           () => console.log('getRepos completed')
            );
        console.log(this.date);

            console.log(this.date);
            this.goToapply()
      }

      goToapply(){

       this.http.get("my_url")
                        .subscribe(data =>{
                                 this.foundRepos=data.json().RESULT.FACET[0,1,2,3.4......].FACET_VALUES; ///get @KEY
                        },error=>{
                            console.log(error);
                        } );

      }

..

    <ion-label>Filterr</ion-label>
          <ion-select [(ngModel)]="refine" (ionChange)="optionsFn();">
            <ion-option value="..." *ngFor="let item of date">{{item["@NAME"]}},({{item["@COUNT"]}})</ion-option>
          </ion-select>
<ion-list>          
          <ion-item *ngFor="let item of foundRepos" (click)="itemClicked($event,item)">
            <h3> {{ item[@KEY"] }}</h3>
          </ion-item>
        </ion-list>

这个value="..."我想留给string使用,不过zi有想法。

例子:计数@NAME = 3 (creator,lang,bnb),得到value="..." = 0,1,2 (0==creator ,1==lang ,2==bnb) 当我选择 lang 我得到 1 ,我用它来 FACET[1].FACET_VALUES ,所以我得到 @KEY

抱歉写错了。我的英语不是很好。

【问题讨论】:

    标签: html json typescript ionic-framework ionic2


    【解决方案1】:

    好的。我想向您指出一个小窍门。你的文字应该会好一些。不是特别是英语,而是更多地解释您当前的结果和您想要的结果。我相信这会迫使你以比现在更快的速度学习英语。 (来自非母语人士)

    "我要数@NAME 设置数组 FACET[] 以显示@KEY"

    因此,使用返回的 JSON,我们可以做几件事,但立即查看您的问题并不太清楚(因为我不认为它质量差或不好,所以 +1问题)。

    所以我应该在我的帖子中介绍 3 件事

    • 计算 NAME 出现的次数
    • 为 FACET 设置数组
    • 显示每个 FACET 的 KEY,这似乎是最终目标。

    好的

    计算 NAME 出现的次数

    所以你基本上已经得到了这个答案。您提交了此代码

    this.http.get("my_url") .subscribe(data =>{ this.date=data.json().RESULT.FACET; //get @NAME });

    这意味着您已经可以访问 FACET 数组。计算 NAME 出现的数量可以通过创建一个 for 循环并检查名称是否未定义(因此递增一个 int)或 counting 始终定义 NAME 的事实来完成,因此只需调用this.date.size()(当然如果 this.date 设置正确)

    获取 FACET 的数组

    这个,你已经通过分配this.date = data.json().RESULT.FACET 来做。您的 this.date 现在包含一个包含 FACET 对象的数组。就像这样看:JSON(带有 cmets,这在 JSON 中是不可能的,但仅用于演示目的)=

    { FACET: // declare the main object, called FACET 
      [     // declaring the FACET as an Array ([] is for creating a list)
        {id: 2} //initializing a child of the FACET array
        ,{id: 3} //initializing the second FACET child.
      ]
    } 
    

    所以,这个伪(不现实的)JSON 包含 2 个对象,分别是 id = 2id = 3

    好的,现在您应该了解一点 JSON,让我们看一下您的代码的外观(考虑到具有多个办公室和每个办公室多个员工的 Businnes)

    {
      OFFICES" : [
           {
             "id" : "1",
             "location" : "New York",
             "employees" : [
               {"id" : "1", "fullName" : "Jon Skeet"},
               {"id" : "2", "fullName" : "Random Stranger"}
             ]
         },
         {
            "id" : "2",
            "location" : "Amsterdam",
            "employees" : [
                {"id" : "1", "fullName" : "Ivaro18"},
                {"id" : "2", "fullName" : "Some-Random Stranger"}
             ]
          }
      ]
    }
    

    此代码与您的代码基本相同。您现在提出的问题是,从我的答案中获取代码,如何获取所有员工的所有 ID 或姓名。 (获取构面对象的所有键名)

    现在让我们用打字稿告诉你

    someFunction() {
       this.http.get('someUrl').map(response => {
          console.log(JSON.stringify(response.json())); // check what you actually retrieve
    
          let decoded = response.json();
          for(let office of decoded.OFFICE) {
             console.log(office.location);
    
             for(let employee of office.employees) {
                console.log(employee.fullName);
             } 
          }
       });
    }
    

    这个程序的预期输出

    > New York
    > Jon Skeet
    > Random Stranger
    > Amsterdam
    > Ivaro18
    > Some-Random Stranger
    

    我认为这个伪代码会让您进行一些开箱即用的思考并找到问题的答案。如果您无法详细说明您想要输出什么,我很乐意随时(甚至是周末)为您提供帮助,只需发表评论,我会在有时间时回复!

    【讨论】:

    • 请阅读我下面的解释 answer2 ,但我不知道设置选项 value="..." 分别保留数字 0,1,2,3
    【解决方案2】:

    @Ivaro18 感谢您的回答。 我想计算@NAME的数量 用于为 FACET 设置数组 并按FACET[] 显示密钥,这似乎是最终目标。

    是的,你完全明白我的意思。 但我希望输出是那个FACET[]中的每一个@KEY

    例子:

    <ion-select [(ngModel)]="refine" (ionChange)="optionsFn();">
                <ion-option value="..." *ngFor="let item of date">{{item["@NAME"]}},({{item["@COUNT"]}})</ion-option>
              </ion-select>
    <ion-list>          
              <ion-item *ngFor="let item of foundRepos" (click)="itemClicked($event,item)">
                <h3> {{ item[@KEY"] }}</h3>
              </ion-item>
            </ion-list>
    

    .

     optionsFn(): void {
                this.http.get("my_url")
                            .subscribe(data =>{
                                     this.date=data.json().RESULT.FACET; //get @NAME
                            },error=>{
    err => console.error(err),
                               () => console.log('getRepos completed')
                );
            console.log(this.date);
    
                console.log(this.date);
                this.goToapply()
          }
    
          goToapply(){
    
           this.http.get("my_url")
                            .subscribe(data =>{
                                     this.foundRepos=data.json().RESULT.FACET[0,1,2,3.4......].FACET_VALUES; ///get @KEY
                            },error=>{
                                console.log(error);
                            } );
    
          }
    

    从上面离子选择是显示creatorlangbnb,我想如果当我选择langion-option value="..." 保留number"@NAME"

    • @NAME的示例计数为3和
    • 当我选择creator is ion-option value="..."
    • 当我选择lang is ion-option value="..."
    • 当我选择bnb is ion-option value="..."

    如果我得到value,我会把它带到goToapply() 设置FACET[]

    • 示例我选择 bnb 我得到值 =2 和 console.log this.refine 是显示2
    • 把它(2)带到let p = this.refine,这样p = 2
    • 将 p 转至 this.foundRepos=data.json().RESULT.FACET[p].FACET_VALUES; 以在 ion-list 中显示 @KEY

    当我选择lang 时输出是

    > tha
    > eng
    

    【讨论】:

    • @Ivaro18 但我不知道设置选项 value="..." 分别保持数字 0,1,2,3
    • Aaaaaah 好吧,我很抱歉,您的回答 很清楚,但我只是读了一遍。要绑定到该值,请尝试&lt;ion-option [value]="date.size() - 1"&gt;&lt;ion-option [attr.value]="date.size() -1"&gt;(注意:无法测试,因为我在移动设备上,您可能需要将date.size() 替换为date.length(),但我不确定
    • @Ivaro18 对不起,但错误:无法读取未定义的属性“长度”。
    • 好的,在你的ion-select上添加一个*ngIf=date
    • @Ivaro18 嘿伙计,我有答案了! &lt;ion-option [value]="i" *ngFor="let item of date;let i = index"&gt;{{item["@NAME"]}},({{item["@COUNT"]}})&lt;/ion-option&gt;谢谢你为我做的一切。
    猜你喜欢
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    • 1970-01-01
    • 2017-01-14
    • 2018-03-15
    相关资源
    最近更新 更多