Chia sẻ qua


Hàm ParseJSON

Áp dụng cho: Ứng dụng Canvas Ứng dụng dựa trên mô hình Power Pages Power Platform CLI

Diễn giải chuỗi JSON và trả về một đối tượng chưa được phân loại hoặc đối tượng đã nhập.

Quan trọng

Description

Hàm ParseJSON phân tích cú pháp một chuỗi JSON hợp lệ và trả về đối tượng chưa được phân loại biểu diễn cấu trúc JSON.

Tùy chọn, sử dụng đối số thứ hai để chuyển đổi JSON thành đối tượng được gõ có thể được sử dụng trực tiếp trong Power Fx công thức. Điều này giúp cho kết quả dễ sử dụng hơn vì không còn cần phải chuyển đổi và ép buộc tại thời điểm sử dụng nữa. JSON không có kiểu được ánh xạ tới kiểu theo các quy tắc sau:

  • Các cột có kiểu dữ liệu không có trong JSON sẽ được điền vào bằng khoảng trống.
  • Các cột trong JSON không có trong kiểu sẽ bị bỏ qua.
  • Đối với các cột vừa có kiểu dữ liệu vừa có kiểu dữ liệu JSON, giá trị JSON phải có thể áp dụng được cho kiểu dữ liệu đó.

Hàm ParseJSON có thể trả về lỗi nếu văn bản không phải là JSON hợp lệ theo định dạng Ký hiệu đối tượng (JSON) JavaScript được mô tả trong ECMA-404IETF RFC 8259.

Cú pháp

ParseJSON( JSONString [, Loại ] )

  • JSONString – Bắt buộc. Cấu trúc JSON được biểu diễn dưới dạng văn bản.
  • Loại - Tùy chọn. Định nghĩa kiểu cho cấu trúc JSON. Power Fx Nếu không có đối số này, ParseJSON sẽ trả về đối tượng chưa được phân loại; với nó, hàm sẽ trả về một đối tượng có kiểu dữ liệu mạnh.

Chuyển đổi loại dữ liệu đối tượng chưa nhập

Nếu không có đối số thứ hai, ParseJSON sẽ trả về đối tượng chưa được phân loại yêu cầu chuyển đổi rõ ràng các giá trị trường trong các kiểu dữ liệu được hỗ trợ. Bảng sau đây liệt kê các kiểu dữ liệu trong Power Apps và một loại dữ liệu JSON tương ứng cũng như cách chuyển đổi loại dữ liệu đó.

Loại dữ liệu Ví dụ về JSON Description Cuộc hội thoại ví dụ
Boolean { "bool": true } Boolean là một loại rõ ràng trong JSON và có thể được chuyển đổi trực tiếp. Boolean(ParseJSON("{ ""bool"": đúng }").bool )
Màu { "color": "#102030" }
{ "r": 255, "g": 128, "b": 0, "a": 0.5 }
Không có loại màu trong JSON. Các giá trị màu có thể được tạo từ số nguyên RGBA hoặc chuỗi thập lục phân. Giá trị màu(ParseJSON("{ ""màu"": ""#102030"" }" ).màu)
Với( { uo: ParseJSON( "{ ""r"": 255, ""g"": 128, ""b"": 0, ""a"": 0.5 }" ) }, RGBA( Giá trị( uo.r ), Giá trị( uo.g ), Giá trị( uo.b ), Giá trị( uo.a ) ) )
Đơn vị tiền tệ, Số { "numbervalue": 123.5 } Các số được biểu thị trực tiếp trong JSON với dấu chấm ( . ) làm dấu phân cách thập phân. Giá trị( ParseJSON("{ ""numbervalue"": 123.5 }").numbervalue )
Ngày, Ngày giờ và Giờ { "start": "2022-05-10" }
{ "start": "23:12:49.000" }
JSON không có loại ngày hoặc giờ nên chỉ có thể biểu thị ngày và giờ dưới dạng chuỗi. Một đối tượng chưa nhập có thể được chuyển đổi trực tiếp từ một chuỗi ở định dạng ISO 8601 thành ngày, giờ hoặc ngày giờ. Đối với các định dạng, trước tiên hãy chuyển đổi trường JSON thành văn bản bằng cách sử dụng hàm Text() rồi dùng hàm DateValue(), TimeValue() hoặc DateTimeValue() theo mặc định sẽ sử dụng ngôn ngữ trong thiết đặt của người dùng hiện tại. DateValue( ParseJSON("{ ""cuộc hẹn"": ""2022-05-10"" }").cuộc hẹn )
DateValue( Text( ParseJSON("{ ""cuộc hẹn"": ""Ngày 5 tháng 5 năm 2022"" }").cuộc hẹn ) )
GUID { "id": "123e4567-e89b-12d3-a456-426655440000" } JSON không có kiểu dữ liệu cho GUI nên chúng chỉ có thể được biểu diễn dưới dạng chuỗi. GUID(ParseJSON("{ ""id"": ""123e4567-e89b-12d3-a456-426655440000"" }").id )
Siêu liên kết, Hình ảnh, Phương tiện { "URI": "https://northwindtraders.com/logo.jpg" } Các loại dữ liệu này là loại dữ liệu văn bản và có thể được chuyển đổi thành văn bản và sau đó sử dụng trong Power Apps. Text( ParseJSON("{ ""URI"": ""https://northwindtraders.com/logo.jpg"" }").URI )
Nhóm chọn { "status": 1 }
{ "status": "Closed" }
Các lựa chọn được trình bày dưới dạng chuỗi bản địa hóa, được hỗ trợ bởi số. Hàm JSON() tuần tự hóa một lựa chọn cho số nền của nó. Không có chuyển đổi trực tiếp từ số hoặc chuỗi thành lựa chọn, nhưng các hàm Switch() hoặc If() có thể được sử dụng trên giá trị văn bản hoặc số. Switch( Giá trị( ParseJSON( "{ ""trạng thái"": 1 }" ).status ), 0, Trạng thái.Mở, 1, Trạng thái.Đóng )
Bản ghi { "field": "value" } Không có chuyển đổi trực tiếp từ đối tượng JSON sang cấu trúc bản ghi nhưng có thể truy xuất các trường riêng lẻ từ đối tượng chưa nhập để tạo một bản ghi mới. { trường: Văn bản( ParseJSON( "{ ""trường"": ""giá trị"" }" ).trường) }
Tham chiếu bản ghi không áp dụng Tham chiếu bản ghi là duy nhất đối với nguồn dữ liệu và không thể được đánh số thứ tự hoặc không được đánh số thứ tự. Các giá trị trường đại diện cho các khóa duy nhất có thể được sử dụng trong JSON để xác định các bản ghi mà sau đó có thể tra cứu được. không áp dụng
Bảng [ { "id": 1, "name": "one" }, { "id": 2, "name": "two" } ]
[1, 2, 3]
JSON có thể chứa các mảng, có thể được chuyển đổi thành bảng. Những giá trị này có thể là mảng bản ghi hoặc mảng giá trị thực sự là bảng một cột. Mảng ParseJSON() chỉ có thể được chuyển đổi thành một bảng cột đơn gồm các đối tượng không được gõ và có thể được sử dụng như vậy hoặc được chuyển đổi thành các bảng bản ghi được gõ bằng cách sử dụng ForAll(). ForAll( Bảng( ParseJSON( "[ { ""id"": 1, ""name"": ""one"" }, { ""id"": 2, ""name"": ""two"" } ]" ) ), { id: Giá trị(ThisRecord.Value.id), tên: Văn bản(ThisRecord.Value.name) } )
Văn bản { "stringField": "this is text" } Văn bản là một loại rõ ràng trong JSON và có thể được chuyển đổi trực tiếp. Văn bản( ParseJSON( "{ ""stringField"": ""đây là văn bản"" }").stringField )
Hai tùy chọn { "available": true }
{ "available": "Yes" }
Hai lựa chọn được trình bày dưới dạng chuỗi bản địa hóa, được hỗ trợ bởi boolean. Hàm JSON() tuần tự hóa hai tùy chọn thành giá trị boolean của nó. Không có chuyển đổi trực tiếp từ boolean, số hoặc chuỗi thành hai lựa chọn, nhưng các hàm Switch() hoặc If() có thể được sử dụng trên giá trị văn bản hoặc số. Chuyển đổi( Boolean( ParseJSON( "{ ""có sẵn"": đúng }" ).có sẵn ), sai, Availability.No, đúng, Khả dụng. Có )

Ví dụ

Truy cập vào các giá trị trường

Đưa ra chuỗi JSON sau trong một biến có tên JsonString

{ "parent": { "child": "text value" }, "number": 567 }
  1. Công thức sau sẽ trả về văn bản text value:
    Text( ParseJSON( JsonString ).parent.child )
    
  2. Công thức sau sẽ trả về số 567:
    Value( ParseJSON( JsonString ).number )
    

Trong trường hợp tên trường bao gồm tên định danh không hợp lệ, bạn có thể đặt tên trường trong dấu nháy đơn. Đưa ra chuỗi JSON sau trong một biến có tên JsonString

{ "0": { "child-field": "text value" } }
  1. Công thức sau sẽ trả về văn bản text value:
    Text( ParseJSON( JsonString ).'0'.'child-field' )
    

Trống

Đưa ra chuỗi JSON sau trong một biến có tên JsonString

{ "text": "text value" , "number": 567, "empty": null }
  1. Cố gắng truy cập vào các trường không tồn tại sẽ trả về Blank(). Công thức sau sẽ trả về true:
    IsBlank( Text( ParseJSON( JsonString ).parent.child ) )
    
  2. Các giá trị JSON null được coi là Blank(). Công thức sau sẽ trả về true:
    IsBlank( Text( ParseJSON( JsonString ).empty ) )
    

Mảng đơn giản

Đưa ra chuỗi JSON sau trong một biến có tên JsonString

{ "array": [1, 2, 3] }
  1. Truy cập số thứ hai trong bảng một cột của trường mảng của đối tượng chưa nhập và chuyển đổi thành một số bằng cách sử dụng Value() sẽ trả về 2:
    Value( Index( ParseJSON( JsonString ).array, 2 ) )
    
  2. Chuyển đổi bảng một cột của đối tượng chưa nhập trong trường mảng thành bảng một cột gồm các số { Value: 1 }, { Value: 2 }, { Value: 3 }:
    ForAll( ParseJSON( JsonString ).array, Value( ThisRecord ) )
    

Mảng của bản ghi

Đưa ra chuỗi JSON sau trong một biến có tên JsonString

{ "array": [
    { "id": 1, "name": "One"},
    { "id": 2, "name": "Two"}
    ] }
  1. Có thể thực hiện chuyển đổi trực tiếp thành bảng đã nhập của bản ghi với ForAll() bằng cách sử dụng ThisRecord.[fieldname] để truy cập đối tượng chưa nhập và chuyển đổi chúng thành các loại đã biết:

    ForAll( ParseJSON( JsonString ).array, { id: Value(ThisRecord.id), name: Text(ThisRecord.name) })
    

Mảng tới bảng

  1. Chuyển đổi đối tượng chưa nhập thành bảng bằng cách sử dụng hàm Table() sẽ tạo ra bảng một cột gồm các đối tượng chưa được nhập. Sau đó, đối tượng cần được truy cập bằng cách sử dụng cột (đơn) Value và được chuyển đổi thành các loại như đã giải thích trước đó.

Đưa ra chuỗi JSON sau trong một biến có tên JsonString

{ "array": [1, 2, 3] }

Table() trả về một bảng một cột gồm các đối tượng không có kiểu với một Giá trị một cột cho số trong mảng...

 Set(untypedTable, Table( ParseJSON( JsonString ).array ));
 
 Value( Index(untypedTable, 1).Value.Value )
 ```

Given the following JSON string in a variable named `JsonString`
```JSON
{ "array": [
 { "id": 1, "name": "One"},
 { "id": 2, "name": "Two"}
 ] }

Table() trả về một bảng một cột gồm các đối tượng không có kiểu biểu diễn từng đối tượng json trong mảng.

  Set(untypedTable, Table( ParseJSON( JsonString ).array ) );
  
  Text( Index(untypedTable, 1).Value.name )