Chia sẻ qua


ParseJSON chức năng

Áp dụng cho: Ứng dụng Canvas Copilot Studio Dựa trên mô hình ứng dụng Power Platform CLI Chức năng dataverse Power Pages

Diễn giải một chuỗi JSON và trả về một giá trị Động hoặc một giá trị được nhập cụ thể nếu một kiểu được cung cấp.

Quan trọng

Description

Hàm ParseJSON phân tích chuỗi JSON hợp lệ và trả về giá trị Động đại diện cho 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 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 hợp lệ JSON theo định dạng Ký hiệu Đối tượng JavaScript (JSON) đượ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 Không có đối số này, ParseJSON trả về giá trị động; với nó, hàm trả về một giá trị được nhập cụ thể.

Chuyển đổi giá trị Động

Không có đối số thứ hai, trả ParseJSON về giá trị Dynamic 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"": true }").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. ColorValue( ParseJSON( "{ ""color"": ""#102030"" }" ).color )
With( { uo: ParseJSON( "{ ""r"": 255, ""g"": 128, ""b"": 0, ""a"": 0,5 }" ) }, RGBA( Value( uo.r ), Value( uo.g ), Value( uo.b ), Value( uo.b ) ) )
Đơ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. Value( 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 giá trị động có thể được chuyển đổi trực tiếp từ một chuỗi ở định dạng ISO 8601 sang 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("{ ""appointment"": ""2022-05-10"" }").appointment )
DateValue( Text( ParseJSON("{ ""appointment"": ""May 5, 2022"" }").appointment )
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( Value( ParseJSON( "{ ""status"": 1 }" ).status ), 0, Status.Open, 1, Status.Closed )
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 bạn có thể truy xuất các trường riêng lẻ từ giá trị Dynamic để tạo bản ghi. { field: Text( ParseJSON( "{ ""field"": ""value"" }" ).field ) }
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. ParseJSON() mảng chỉ có thể được chuyển đổi thành một bảng cột giá trị Động và có thể được sử dụng như vậy hoặc chuyển đổi thành bảng bản ghi đã nhập bằng cách sử dụng ForAll(). ForAll( Table( ParseJSON( "[ { ""id"": 1, ""name"": ""one"" }, { ""id"": 2, ""name"": ""two"" } ]" ) ), { id: Value(ThisRecord.Value.id), name: Text(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. Text( ParseJSON( "{ ""stringField"": ""this is text"" }").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ố. Switch( Boolean( ParseJSON( " { ""available"": true }" ).available ), false, Availability.No, true, Availability.Yes )

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 nhập số thứ hai trong bảng một cột giá trị Động của trường mảng và chuyển đổi thành số bằng cách sử dụng Value() trả về 2:
    Value( Index( ParseJSON( JsonString ).array, 2 ) )
    
  2. Chuyển đổi bảng một cột chứa các giá trị động trong trường mảng, thành một bảng số cột duy nhất { 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. Chuyển đổi thành bảng bản ghi đã nhập trực tiếp bằng ForAll()ThisRecord.[fieldname] có thể được thực hiện bằng cách sử dụng để truy nhập các trường động và chuyển đổi chúng thành các loại cụ thể:

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

Mảng tới bảng

  1. Việc chuyển đổi các giá trị động thành bảng bằng cách sử dụng hàm Table() sẽ dẫn đến bảng đơn cột chứa các giá trị động . 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ề bảng một cột chứa các giá trị động với một cột đơn Giá trị 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ề bảng một cột chứa các giá trị động đại diện cho từng đối tượng json trong mảng.

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