Κοινοποίηση μέσω


Συνάρτηση ParseJSON

Ισχύει για: Εφαρμογές καμβά Copilot Studio Εφαρμογές βάσει μοντέλου Power Platform Συναρτήσεις του Power Platform CLI Dataverse στο Power Pages

Ερμηνεύει μια συμβολοσειρά JSON και επιστρέφει μια δυναμική τιμή ή μια συγκεκριμένη πληκτρολογηθείσα τιμή εάν παρέχεται ένας τύπος.

Σημαντικό

Description

Η ParseJSON συνάρτηση αναλύει μια έγκυρη συμβολοσειρά JSON και επιστρέφει μια δυναμική τιμή που αντιπροσωπεύει τη δομή JSON.

Προαιρετικά, χρησιμοποιήστε το δεύτερο όρισμα για να μετατρέψετε το JSON σε τυπολογημένο αντικείμενο που μπορεί να χρησιμοποιηθεί απευθείας σε Power Fx φόρμουλες. Αυτό καθιστά το αποτέλεσμα ευκολότερο στην κατανάλωση, καθώς δεν απαιτούνται πλέον μετατροπές και εξαναγκασμοί στο σημείο χρήσης. Το μη πληκτρολογημένο JSON αντιστοιχίζεται στον τύπο με αυτούς τους κανόνες:

  • Οι στήλες του τύπου που δεν υπάρχουν στο JSON συμπληρώνονται με κενό.
  • Οι στήλες στο JSON που δεν υπάρχουν στον τύπο παραβλέπονται.
  • Στήλες που είναι τόσο στον τύπο όσο και στο JSON, η τιμή JSON πρέπει να είναι μετατρέψιμη στον τύπο.

Η ParseJSON συνάρτηση μπορεί να επιστρέψει σφάλματα εάν το κείμενο δεν είναι έγκυρο JSON σύμφωνα με τη μορφή σημειογραφίας αντικειμένων JavaScript (JSON) που περιγράφεται στα ECMA-404 και IETF RFC 8259.

Σύνταξη

ParseJSON( JSONString [ , Τύπος ] )

  • JSONString – Υποχρεωτικό. Η δομή JSON που αντιπροσωπεύεται ως κείμενο.
  • Τύπος - Προαιρετικό. Ο Power Fx ορισμός τύπου για τη δομή JSON. Χωρίς αυτό το όρισμα, ParseJSON επιστρέφει μια δυναμική τιμή. Μαζί με αυτή, η συνάρτηση επιστρέφει μια συγκεκριμένη πληκτρολογηθείσα τιμή.

Μετατροπή δυναμικών τιμών

Χωρίς το δεύτερο όρισμα, ParseJSON επιστρέφει μια δυναμική τιμή που απαιτεί ρητή μετατροπή των τιμών πεδίου σε υποστηριζόμενους τύπους δεδομένων. Ο παρακάτω πίνακας περιλαμβάνει τους τύπους δεδομένων στο Power Apps, καθώς και έναν αντίστοιχο τύπο δεδομένων JSON και τον τρόπο μετατροπής τους.

Τύπος δεδομένων Παραδείγματα JSON Description Παράδειγμα μετατροπής
Boolean { "bool": true } Η δυαδική τιμή είναι ρητός τύπος στο JSON και μπορεί να μετατραπεί απευθείας. Boolean( ParseJSON("{ ""bool"": true }").bool )
Color { "color": "#102030" }
{ "r": 255, "g": 128, "b": 0, "a": 0.5 }
Δεν υπάρχει τύπος χρώματος στο JSON. Μπορείτε να δημιουργήσετε τιμές χρωμάτων από ακέραιους RGBA ή δεκαεξαδικές συμβολοσειρές. 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 ), Value( uo.a ) ) )
Νόμισμα, Αριθμός { "numbervalue": 123.5 } Οι αριθμοί αντιπροσωπεύονται απευθείας στο JSON με μια τελεία ( . ) ως την υποδιαστολή. Value( ParseJSON("{ ""numbervalue"": 123.5 }").numbervalue )
Ημερομηνία, Ημερομηνία/Ώρα, Ώρα { "start": "2022-05-10" }
{ "start": "23:12:49.000" }
Το JSON δεν έχει τύπο ημερομηνίας ή ώρας, επομένως μπορεί να αντιπροσωπεύει μόνο ημερομηνίες και ώρες ως συμβολοσειρές. Μια δυναμική τιμή μπορεί να μετατραπεί απευθείας από μια συμβολοσειρά σε μορφή ISO 8601 σε ημερομηνία, ώρα ή ημερομηνία/ώρα. Για άλλες μορφές, πρώτα μετατρέψτε το πεδίο JSON σε κείμενο χρησιμοποιώντας τη συνάρτηση Text() και, στη συνέχεια, χρησιμοποιήστε τη συνάρτηση DateValue(), TimeValue() ή DateTimeValue() που από προεπιλογή θα χρησιμοποιήσει τη γλώσσα των ρυθμίσεων του τρέχοντα χρήστη. DateValue( ParseJSON("{ ""appointment"": ""2022-05-10"" }").appointment )
DateValue( Text( ParseJSON("{ ""appointment"": ""May 5, 2022"" }").appointment ) )
GUID { "id": "123e4567-e89b-12d3-a456-426655440000" } Το JSON δεν έχει τύπο δεδομένων για τα GUId, επομένως μπορούν να αναπαρασταθούν μόνο ως συμβολοσειρές. GUID( ParseJSON("{ ""id"": ""123e4567-e89b-12d3-a456-426655440000"" }").id )
Υπερ-σύνδεση, εικόνα, μέσα { "URI": "https://northwindtraders.com/logo.jpg" } Αυτοί οι τύποι δεδομένων είναι τύποι δεδομένων κειμένου, και είναι δυνατό να μετατραπούν σε κείμενο και, στη συνέχεια, να χρησιμοποιηθούν στο Power Apps. Text( ParseJSON("{ ""URI"": ""https://northwindtraders.com/logo.jpg"" }"). URI )
Επιλογή { "status": 1 }
{ "status": "Closed" }
Οι επιλογές παρουσιάζονται ως μεταφρασμένες συμβολοσειρές, υποστηριζόμενες από αριθμό. Η συνάρτηση JSON() σειριοποιεί μια επιλογή στον αριθμό υποστήριξης. Δεν υπάρχει άμεση μετατροπή από αριθμό ή συμβολοσειρά σε επιλογή, αλλά οι συναρτήσεις Switch() ή If() μπορούν να χρησιμοποιηθούν στο κείμενο ή την τιμή του αριθμού. Switch( Value( ParseJSON( "{ ""status""": 1 }" ).status ), 0, Status.Open, 1, Status.Closed )
Εγγραφή { "field": "value" } Δεν υπάρχει απευθείας μετατροπή από ένα αντικείμενο JSON σε μια δομή εγγραφής, αλλά μπορούν να ανακτηθούν μεμονωμένα πεδία από τη δυναμική τιμή για να σχηματιστεί μια εγγραφή. { field: Text( ParseJSON( "{ ""field"": ""value"}" ).field ) }
Αναφορά καρτέλας δ/υ Οι αναφορές καρτελών είναι μοναδικές σε προελεύσεις δεδομένων και δεν είναι δυνατό να σειριοποιηθούν ή να αποσειριοποιηθούν. Οι τιμές πεδίων που αντιπροσωπεύουν μοναδικά κλειδιά μπορούν να χρησιμοποιηθούν στο JSON για τον προσδιορισμό καρτελών που μπορούν να χρησιμοποιηθούν στη συνέχεια. δ/υ
Table [ { "id": 1, "name": "one" }, { "id": 2, "name": "two" } ]
[1, 2, 3]
Το JSON μπορεί να περιέχει πίνακες, οι οποίοι μπορούν να μετατραπούν σε πίνακες. Αυτές οι τιμές μπορούν να είναι πίνακες καρτελών ή πίνακες τιμών που ουσιαστικά είναι πίνακες μίας στήλης. ParseJSON() οι πίνακες μπορούν να μετατραπούν μόνο σε έναν πίνακα μοναδικής στήλης δυναμικών τιμών και μπορούν να χρησιμοποιηθούν ως τέτοιοι ή να μετατραπούν σε πληκτρολογημένους πίνακες εγγραφών χρησιμοποιώντας τη συνάρτηση ForAll(). ForAll( Table( ParseJSON( "[ { ""id"": 1, ""name"": ""one"" }, { ""id"": 2, ""name"": ""two"" } ]" ) ), { id: Value(ThisRecord.Value.id), name: Text(ThisRecord.Value.name) } )
Μήνυμα κειμένου { "stringField": "this is text" } Το κείμενο είναι ρητός τύπος στο JSON και μπορεί να μετατραπεί απευθείας. Text( ParseJSON( "{ ""stringField"": ""this is text"}").stringField )
Δύο επιλογές { "available": true }
{ "available": "Yes" }
Δύο επιλογές παρουσιάζονται ως μεταφρασμένες συμβολοσειρές, με υποστήριξη από δυαδική τιμή. Η συνάρτηση JSON() σειροποιεί μια επιλογή δύο στη δυαδική τιμή της. Δεν υπάρχει άμεση μετατροπή από δυαδική τιμ.η, αριθμό ή συμβολοσειρά σε δύο επιλογές, αλλά οι συναρτήσεις Switch() ή If() μπορούν να χρησιμοποιηθούν στο κείμενο, τον αριθμό ή τη δυαδική τιμή. Switch( Boolean( ParseJSON( "{ ""available"": true }" ).available ), false, Availability.No, true, Availability.Yes )

Παραδείγματα

Πρόσβαση σε τιμές πεδίου

Δεδομένης της παρακάτω συμβολοσειράς JSON σε μια μεταβλητή με όνομα JsonString

{ "parent": { "child": "text value" }, "number": 567 }
  1. Ο παρακάτω τύπος επιστρέφει το κείμενο text value:
    Text( ParseJSON( JsonString ).parent.child )
    
  2. Ο παρακάτω τύπος επιστρέφει τον αριθμό 567:
    Value( ParseJSON( JsonString ).number )
    

Σε περίπτωση που ένα όνομα πεδίου αποτελείται από ένα μη έγκυρο όνομα αναγνωριστικού, μπορείτε να βάλετε τα ονόματα πεδίων σε μεμονωμένες προσφορές. Δεδομένης της παρακάτω συμβολοσειράς JSON σε μια μεταβλητή με όνομα JsonString

{ "0": { "child-field": "text value" } }
  1. Ο παρακάτω τύπος επιστρέφει το κείμενο text value:
    Text( ParseJSON( JsonString ).'0'.'child-field' )
    

Κενά

Δεδομένης της παρακάτω συμβολοσειράς JSON σε μια μεταβλητή με όνομα JsonString

{ "text": "text value" , "number": 567, "empty": null }
  1. Η προσπάθεια πρόσβασης σε μη υπάρχοντα πεδία επιστρέφει Blank(). Ο παρακάτω τύπος επιστρέφει true:
    IsBlank( Text( ParseJSON( JsonString ).parent.child ) )
    
  2. Οι τιμές null JSON θεωρούνται Blank(). Ο παρακάτω τύπος επιστρέφει true:
    IsBlank( Text( ParseJSON( JsonString ).empty ) )
    

Απλοί πίνακες

Δεδομένης της παρακάτω συμβολοσειράς JSON σε μια μεταβλητή με όνομα JsonString

{ "array": [1, 2, 3] }
  1. Η πρόσβαση στον δεύτερο αριθμό στον πίνακα μοναδικής στήλης δυναμικών τιμών του πεδίου πίνακα και η μετατροπή σε έναν αριθμό με χρήση της συνάρτησης Value() επιστρέφει 2:
    Value( Index( ParseJSON( JsonString ).array, 2 ) )
    
  2. Μετατροπή του πίνακα μίας στήλης δυναμικών τιμών στο πεδίο πίνακα, σε έναν πίνακα μοναδικής στήλης αριθμών { Value: 1 }, { Value: 2 }, { Value: 3 }:
    ForAll( ParseJSON( JsonString ).array, Value( ThisRecord ) )
    

Πίνακες καρτελών

Δεδομένης της παρακάτω συμβολοσειράς JSON σε μια μεταβλητή με όνομα JsonString

{ "array": [
    { "id": 1, "name": "One"},
    { "id": 2, "name": "Two"}
    ] }
  1. Η μετατροπή σε έναν πληκτρολογημένες πίνακα εγγραφών απευθείας με τη συνάρτηση ForAll() μπορεί να γίνει χρησιμοποιώντας την ThisRecord.[fieldname] για πρόσβαση σε δυναμικά πεδία και τη μετατροπή τους σε συγκεκριμένους τύπους:

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

Πίνακας σε πίνακα

  1. Η μετατροπή δυναμικών τιμών σε πίνακα χρησιμοποιώντας τη συνάρτηση Table() έχει ως αποτέλεσμα έναν πίνακα δυναμικών τιμών μίας στήλης. Στη συνέχεια, η πρόσβαση στο αντικείμενο θα πρέπει να γίνει με τη χρήση (μίας) στήλης Value και να μετατραπεί σε τύπους όπως εξηγείται προηγουμένως.

Δεδομένης της παρακάτω συμβολοσειράς JSON σε μια μεταβλητή με όνομα JsonString

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

Η συνάρτηση Table() επιστρέφει έναν πίνακα δυναμικών τιμών μίας στήλης με τιμή μίας στήλης για τον αριθμό στον πίνακα...

 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() επιστρέφει έναν πίνακα μίας στήλης δυναμικών τιμών που αντιπροσωπεύει κάθε αντικείμενο json στον πίνακα.

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