مشاركة عبر


ParseJSON دالة

ينطبق على: تطبيقات Canvas لتطبيقات Copilot Studio المستندة إلى نموذج وظائف Power Platform CLI Dataverse Power Pages

تفسير سلسلة JSON وإرجاع قيمة ديناميكية أو قيمة مكتوبة معينة إذا تم توفير نوع.

مهم

الوصف

تقوم ParseJSON الدالة بتحليل سلسلة JSON صالحة وإرجاع قيمة ديناميكية تمثل بنية JSON.

وبشكل اختياري، استخدم الوسيطة الثانية لتحويل JSON إلى كائن مصنف يمكن استخدامه مباشرة في صيغ Power Fx. ويجعل هذا النتيجة أسهل في الاستهلاك حيث لم تعد التحويلات والإكراهات عند نقطة الاستخدام مطلوبة. يتم تعيين JSON غير المصنف إلى النوع الذي يحتوي على هذه القواعد:

  • ويتم ملء الأعمدة من النوع غير الموجودة في JSON بالفراغ.
  • يتم تجاهل الأعمدة الموجودة في JSON والتي لا توجد في النوع.
  • والأعمدة الموجودة في كل من النوع وJSON، يجب أن تكون قيمة JSON قابلة للفرض على النوع.

ParseJSON يمكن أن ترجع الدالة أخطاء إذا كان النص غير صالح JSON وفقا لتنسيق JavaScript Object Notation (JSON) الموضح في ECMA-404وIETF RFC 8259.

بناء الجملة

ParseJSON( JSONString [ , Type ] )

  • JSONString – مطلوب. بنية JSON ممثلة كنص.
  • النوع - اختياري. تعريف نوع Power Fx لبنية JSON. بدون هذه الوسيطة، ParseJSON ترجع قيمة ديناميكية؛ ومعها ترجع الدالة قيمة مكتوبة معينة.

تحويل القيم الديناميكية

بدون الوسيطة الثانية، ParseJSON ترجع قيمة ديناميكية تتطلب تحويلا صريحا لقيم الحقول في أنواع البيانات المدعومة. يسرد الجدول التالي أنواع البيانات في Power Apps ونوع بيانات JSON المقابل وكيفية تحويله.

نوع البيانات أمثلة JSON الوصف مثال عن التحويل
قيمة منطقية { "bool": true } النوع "منطقي" هو نوع واضح في JSON ويمكن تحويله مباشرة. منطقي( ParseJSON("{ ""bool"": true }").bool )
Color { "color": "#102030" }
{ "r": 255, "g": 128, "b": 0, "a": 0.5 }
لا يوجد نوع لون في JSON. يمكن إنشاء قيم اللون من سلاسل أعداد صحيحة RGBA أو سلاسل ست عشرية. ColorValue( ParseJSON( "{ ""color": ""#102030"" }" ).color )
مع( { uo: ParseJSON( "{ ""r": 255, ""g"": 128, ""b"": 0, "a"": 0.5 }" ) }, RGBA( Value( uo.r ), Value( uo.g ), 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() or 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 )
Choice { "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 لتحديد السجلات التي يمكن البحث فيها بعد ذلك. غير متوفر
جدول [ { "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 الفارغة (). تُرجع الصيغة التالية 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 )