
# 指定结果的输出格式
命令中使用"--cli-query"传入[JMESPath表达式](https://support.huaweicloud.com/hcli_faq/hcli_23_002.html)，对结果执行JMESPath查询，方便提炼原返回结果中的关键信息；"--cli-output"指定响应数据的输出格式；"--cli-output-num"指定当使用table格式输出时，是否打印行号。
 #### **输出顺序**
使用"--cli-query"指定的JMESPath表达式不同，输出的结果中各参数的排列顺序可能不同。部分表达式的输出结果不会带有输出数据的属性名（即参数的key值），故用户需对输出数据的顺序有所把握，以便于数据处理。不同类型的JMESPath表达式，输出结果的顺序如下表所示：
表1不同JMESPath表达式的数据输出顺序 
| JMESPath表达式类型                                            | JMESPath表达式示例                                                        | json/table格式输出时，是否带有属性名（即参数的key值） | tsv格式输出时，是否带有属性名（即参数的key值） | 输出数据的顺序                        | 示例                                   |
|:---|:---|:---|:---|:---|:---|
| 表达式指定至对象层级                                               | --cli-query="items\[0\]"                                             | 是                                 | 否                          | 以该对象各属性名的字典顺序，输出其对应的值          | [示例1]     |
| 表达式指定至对象的属性层级，且未对属性名重命名                                  | --cli-query="items\[0\].items\[0\].\[spec.flavor,metadata.uid\]"     | 否                                 | 否                          | 以JMESPath表达式中指定各属性名的顺序，输出其对应的值 | [示例2]   |
| 表达式指定至对象的属性层级 ，且对属性名进行了重命名 | --cli-query="items\[0\].{Flavor:spec.flavor,ClusterID:metadata.uid}" | 是                                 | 否                          | 以其重命名后的各属性名的字典顺序，输出其对应的值       | [示例3] |
   
以json输出格式为例，示范不同JMESPath表达式的数据输出顺序：
- 示例1：
  指定至对象层级，KooCLI会以该对象各属性名的字典顺序，输出其对应的值。在此示例中指定至对象"items\[0\]"，该对象中各属性按字典顺序排序后为：apiVersion，kind，metadata，spec，status。因此输出结果如下：
  ```
  hcloud CCE ListClusters --cli-region="cn-north-4" --type="VirtualMachine" --project_id="0dd8cb****************19b5a84546" --cli-query="items[0]"
  {
    "apiVersion": "v3",
    "kind": "Cluster",
    "metadata": {
      "creationTimestamp": "2022-05-13 08:51:58.252509 +0000 UTC",
      "labels": {
        "FeatureGates": "elbv3,"
      },
      "name": "github-*****-****",
      "uid": "f288****-****-****-****-****ac101534",
      "updateTimestamp": "2022-05-13 09:10:06.395875 +0000 UTC"
    },
    "spec": {
      "authentication": {
        "authenticatingProxy": {},
        "mode": "rbac"
      },
      "az": "multi_az",
      "billingMode": 0,
      "category": "CCE",
      "containerNetwork": {
        "cidr": "10.*.*.*/**",
        "mode": "vpc-router"
      },
      "eniNetwork": {},
      "extendParam": {
        "alpha.cce/fixPoolMask": "25",
        "kubernetes.io/cpuManagerPolicy": "",
        "upgradefrom": ""
      },
      "flavor": "cce.s2.small",
      "hostNetwork": {
        "SecurityGroup": "653e****-****-****-****-****6a23eb7e",
        "subnet": "d5df****-****-****-****-****4955c724",
        "vpc": "c865****-****-****-****-****efe7e8d8"
      },
      "kubeProxyMode": "iptables",
      "kubernetesSvcIpRange": "10.***.*.*/**",
      "masters": [
        {
          "availabilityZone": "cn-north-4b"
        },
        {
          "availabilityZone": "cn-north-4a"
        }
      ],
      "supportIstio": true,
      "type": "VirtualMachine",
      "version": "v1.19.10-r0"
    },
    "status": {
      "endpoints": [
        {
          "type": "Internal",
          "url": "https://192.***.*.***:5443"
        },
        {
          "type": "External",
          "url": "https://121.**.**.***:5443"
        }
      ],
      "phase": "Available"
    }
  }
  ```
  
- 示例2：
  指定至对象的属性层级，且未对属性名重命名，KooCLI会以指定各属性名的顺序，输出其对应的值。在此示例中指定至对象"items\[0\]"的两个对象属性的子属性，表达式"items\[0\].\[spec.flavor,metadata.uid\]"中先指定了其spec对象属性的flavor属性，再指定了其metadata对象属性的uid属性，因此输出结果中，先输出spec.flavor的值，再输出metadata.uid的值，结果如下：
  ```
  hcloud CCE ListClusters --cli-region="cn-north-4" --type="VirtualMachine" --project_id="0dd8cb****************19b5a84546" --cli-query="items[0].[spec.flavor,metadata.uid]"
  [
    "cce.s2.small",
    "f288****-****-****-****-****ac101534"
  ]
  ```
  
- 示例3：
  指定至对象的属性层级，且对属性名进行了重命名，KooCLI会以重命名后的各属性名的字典顺序，输出其对应的值。在此示例中指定至对象"items\[0\]"的两个对象属性的子属性，表达式"items\[0\].{Flavor:spec.flavor,ClusterID:metadata.uid}"中，将spec对象属性的flavor属性重命名为Flavor，将metadata对象属性的uid属性重命名为ClusterID。按字典顺序排序其重命名后的属性为：ClusterID，Flavor。因此输出结果如下：
  ```
  hcloud CCE ListClusters --cli-region="cn-north-4" --type="VirtualMachine" --project_id="0dd8cb****************19b5a84546" --cli-query="items[0].{Flavor:spec.flavor,ClusterID:metadata.uid}"
  {
    "ClusterID": "f288****-****-****-****-****ac101534",
    "Flavor": "cce.s2.small"
  }
  ```
  
#### **输出格式**
使用"--cli-output"指定输出格式，"--cli-output"的取值可以为json，table，tsv其中之一。
- 当"--cli-output"的取值为json时：
  将以json格式输出结果，如下：
  ```
  hcloud configure list --cli-output=json --cli-query="profiles[].{Name:name,Mode:mode,Ak:accessKeyId,SK:secretAccessKey}"
  [
    {
      "Ak": "8NV****IOV",
      "Mode": "AKSK",
      "Name": "test",
      "SK": "****"
    },
    {
      "Ak": "H9N****MXW",
      "Mode": "AKSK",
      "Name": "default",
      "SK": "****"
    }
  ]
  ```
  
- 当"--cli-output"的取值为table时： 将以table格式输出结果，如下：
  ![](https://support.huaweicloud.com/usermanual-hcli/zh-cn_image_0000001372518202.png "点击放大")
  当指定"--cli-output"的取值为table，可以同时使用"--cli-output-num"指定是否打印行号：
  ![](https://support.huaweicloud.com/usermanual-hcli/zh-cn_image_0000001372837950.png "点击放大")
  
- 当"--cli-output"的取值为tsv时： 将以tsv格式输出结果，如下：
  ![](https://support.huaweicloud.com/usermanual-hcli/zh-cn_image_0000001372519738.png "点击放大")
  tsv输出格式返回制表符和换行分隔的数据值，不包含额外的符号，方便将输出结果用于其他命令。因tsv的输出结果中不包含数据表头，故用户在使用时需把握不同类型的JMESPath表达式输出数据的顺序，防止数据用于其他命令时出现混乱，详情请参考[不同类型JMESPath表达式的数据输出顺序]。
  使用tsv格式输出，若jMESPath表达式中指定了多个属性名，且未对属性名重命名，则当其中某个或多个属性名被单独用"\[\]"括起来时，该属性将在输出时被换行至新的一行输出，如下：
  ![](https://support.huaweicloud.com/usermanual-hcli/zh-cn_image_0000001298455945.png "点击放大")
  在上图的示例中，指定输出属性为：name，mode，accessKeyId，secretAccessKey。且其中的name被指定以新的一行输出。按照属性被指定时的顺序，第一行输出的分别为mode，accessKeyId，secretAccessKey的值，第二行输出的是name值。
  
 
![](https://support.huaweicloud.com/usermanual-hcli/public_sys-resources/note_3.0-zh-cn.png)
可[点此了解](https://support.huaweicloud.com/hcli_faq/hcli_23_004.html)关于"--cli-query"，"--cli-output"，"--cli-output-num"使用时的其他注意事项。
