Бөлісу құралы:


JSON бағдарламасымен жұмыс істеу Power Fx

Power Fx жасаушыларға Жіктелмеген нысанғаParseJSON функциясы арқылы JSON оқуға мүмкіндік береді.

Мәндерді оқу және түрлендіру

ParseJSON келесі JSON жазба жолын ItemName, Quantity, ReleaseDate және AvailableForPreOrder өрістері бар Жіктелмеген нысанға түрлендіреді.

{
  "ItemName" : "Widget 1",
  "Quantity" : 46,
  "ReleaseDate" : "2022-09-01",
  "AvailableForPreOrder" : true
}

Өрістердің әрқайсысына ParseJSON пішімінен қайтарылған Жіктелмеген нысан мәніндегі нүктелі жазуды пайдаланып қол жеткізуге болады.

Set( untyped, ParseJSON( jsonStringVariable ) );

Set( item, Text ( untyped.ItemName ) );
Set( quantity, Value ( untyped.Quantity ) );
Set( release, DateValue ( untyped.ReleaseDate ) );
Set( preorder, Boolean ( untyped.AvailableForPreOrder ) );

жіктелмеген нысан мәнін нақты түрге түрлендіру үшін әдетте жақсы идея. жіктелмеген нысан айнымалы мән ретінде орнату айнымалы мәнді жіктелмеген нысан ақ етеді. Осылайша, айнымалыға орнату кезінде мұндай мәнді анық түрлендіру қажет болуы мүмкін. Бірақ көп жағдайда жіктелмеген нысан мәндері функция параметрлері ретінде пайдаланылған кезде автоматты түрде белгілі бір түрге («мәжбүрлеу») түрленеді, мұнда түр логикалық, сан немесе мәтін сияқты қарапайым түр болып табылады және функцияның параметр профилінде әлеуетті қайшылықты шамадан тыс жүктемелер болмайды. .

Left( untyped.ItemName, 1 ); // "W"
Radians( untyped.Quantity ); // 0.80285146
If (untyped.AvailableForPreOrder, "Available", "Not Available" ); // "Available"

Функция шақыруларындағы түрді автоматты түрлендірумен қатар, мүмкін болған жағдайда, басқару сипаттарына тағайындалғанда терілмеген нысандар да түрлендіріледі.

Label1.Text: untyped.Quantity
InputText1.Default: untyped.ItemName

Соңында, операторларды мысалы & немесе + пайдаланғанда, an< жіктелмеген нысан егер күтілетін түрде екіұштылық болмаса, мәжбүрленеді.

untyped.Quantity + 1 // result is a number
untyped.ItemName & " (preorder)" // result is text
untyped.Quantity + untyped.Quantity // result is a number
untyped.Quantity & untyped.ItemName // result is text

Ескертпе

JSON жоқ GUID, Түс, Уақыт немесе Күн-Уақыт түрі. Бұл мәндер жол ретінде көрсетіледі. Күнді қамтитын JSON жіктелмеген нысан мәнін мәтін сипатына тікелей тағайындасаңыз, JSON бастапқы мәтіні қолданылатын болады. Бұл уақыт белдеулерімен, күн пішімдерімен және т.б. жұмыс істегенде маңызды болуы мүмкін. Мұндай жағдайларда мәндерді GUID(), арқылы нақты түрлендіру керек. ColorValue(), DateValue(), DateTimeValue(), т.б.

Өріс атауы жарамсыз идентификатор атауынан тұратын жағдайда, мысалы, өріс атаулары саннан басталатын немесе сызықша сияқты жарамсыз таңбаларды қамтитын болса, өріс атауларын жалғыз тырнақшаға қоюға болады:

untyped.'01'
untyped.'my-field'

Power Fx формула орындалғанша өрістің бар-жоғын бағаламайды. Бұл кіріс JSON пішімінде икемділікке мүмкіндік береді. Мысалы, алдыңғы JSON пішімінде кейде Discount деп аталатын қосымша өріс болуы мүмкін. Бірақ алдыңғы мысалда бұл өріс жоқ. Discount өрісін пайдаланатын формуланы жазу қолданбаны жасау процесінде немесе пайдаланушылар қолданбаны пайдаланған кезде қате орын алмайды. Формула орындалған кезде өріс жоқ болса, мән жай ғана Бос() мәнін береді.

Ескертпе

JSON пішімі өрістердің null мәндеріне қолдау көрсетеді. Бұл сонымен қатар Бос() мәндерін береді. Қазіргі уақытта жоқ өріс арасындағы Power Fx немесе null мәні бар өріс арасында ешқандай айырмашылық жоқ.

Жіктелмеген нысандардағы өрістерге қол жеткізу формуланы жазу кезінде бағаланбайтындықтан, сонымен қатар Intellisense қолжетімді емес. JSON және Power Fx екеуі де әріптердің үлкен-кішілігіне назар аударады, сондықтан өріс атауларын жазуда аса сақ болыңыз.

JSON мәндері жазба стиліндегі нотацияда болмауы керек. Жарамды JSON жай ғана мән болуы мүмкін, мысалы, "text value", true немесе 123.456. Мұндай жағдайда ParseJSON қайтатын Жіктелмеген нысан мәннің өзі және нүкте белгісі пайдаланылмайды.

Set( myText, Boolean( ParseJSON( "true" ) ) );

Set( myNumber, Value( ParseJSON( "123.456" ) ) );

Соңында, JSON кірістірілген жазбаларға қолдау көрсетеді. Мұндай JSON пішімін Жіктелмеген нысанға түрлендіру кірістірілген нысандарға әкеледі және пунктирлі нұсқауды иерархияны қарап шығу үшін пайдалануға болады.

{
  "Version" : 1,
  "RootElement" : {
    "Parent" : {
      "Name" : "This is the parent",
      "Child" : {
        "Name" : "This is the child"
      }
    }
  }
}

Осы JSON жолын Жіктелмеген нысанға jsonObject атты айнымалыға түрлендіру кезінде өрістерге пунктирлі нұсқауды пайдалану арқылы қол жеткізуге болады.

Set( jsonObject, ParseJSON( jsonStringVariable ) );

Set( parentName, Text( jsonObject.RootElement.Parent.Name ) ); // "This is the parent"

Set( childName, Text( jsonObject.RootElement.Parent.Child.Name ) ); // "This is the child"

Егер пунктирлі нұсқау өрнегіндегі өрістердің кез келгені жоқ болса, Бос() қайтарылады.

Массивтер мен кестелер

JSON мәндер немесе жазбалар массивтерін қамтуы мүмкін. Бұл массивтерге тікелей немесе Power Fx кестелеріне түрлендіру арқылы қол жеткізуге болады.

{
  "OrderNumber" : "SO000010",
  "CustomerID" : "CUST0126",
  "OrderLines" : [
    {
      "Item" : "Widget 1",
      "Quantity" : 3
    },
    {
      "Item" : "Widget 2",
      "Quantity" : 5
    }
  ]
}

Осы JSON құрамында жазбалар массиві бар OrderLines деп аталатын өрісі бар жазбаны қамтиды. Әр жазбада екі өріс бар: Item және Quantity. JSON пішімі Жіктелмеген нысанғаParseJSON функциясын қолдану арқылы түрленсе, jsonOrder атты айнымалы мәнге орнатсаңыз, біз жеке тапсырыс жолдарына бірнеше жолмен қол жеткізе аламыз.

Set( jsonOrder, ParseJSON( jsonStringVariable ) );

Жеке жазбалар мен мәндерді Index() функциясы арқылы шығарып алуға болады. Мысалы, OrderLines өрісіндегі екінші жазбаны алу үшін Quantity өрісіне кіріп, оны мәнге түрлендіріңіз.

Set( line2Quantity, Value( Index( jsonOrder.OrderLines, 2 ).Quantity ); // 5

Тапсырыс жолдары массивін тікелей кестеге түрлендіруге болады. Бұл жазбаны көрсететін Жіктелмеген нысан арқылы бір бағанды кестені жасайды.

Set( orderLines, Table( jsonOrder.OrderLines ) );

Бір бағанды "orderLines" кестесінде енді Жіктелмеген нысанды көрсететін "Мән" бағаны бар. Осы кестедегі жазбадан өрістердің кез келгенін пайдалану үшін, Value бағанындағы Жіктелмеген нысан ішіндегі арнайы JSON өрісіне қол жеткізу үшін пунктирлі нұсқауды пайдаланыңыз.

Set( jsonRecord, Index( orderLines, 2 ) ); // Get the second record in the table

Set( line2Item, Text( jsonRecord.Value.Item ) ); // "Widget 2"

Бағдарламаның басқа бөліктерінде тапсырыс жолының жазбаларын пайдалануды жеңілдету және қарапайым ету үшін ForAll() функциясын пайдаланып, бүкіл Жіктелмеген нысанды толығымен жіктелген жазбаға түрлендіруге болады. Жіктелмеген нысанды тікелей ForAll() параметріне беру бір бағанды Value өрісін пайдаланудың орнына нысан өрістеріне тікелей қол жеткізе алатыныңызды білдіреді.

Set( typedOrderLines, ForAll( jsonOrder.OrderLines, { Item : Text( ThisRecord.Item ), Quantity : Value( ThisRecord.Quantity ) } ) );

Жаңа typedOrderLines айнымалысы келесі бағандар мен мәндері бар толық жіктелген Power Fx кестесі болып табылады:

Элемент Шама
"1-виджет" 3-көше
"2-виджет" 5

Алдыңғы мысалдар жазбалар массивтерін пайдаланады, бірақ JSON сонымен қатар жай мәндердің массивтерін қамтуы мүмкін. Үш жолы бар массивтен тұратын жарамды JSON жолы болып табылатын келесі мысалды қарастырыңыз.

[ "First Item", "Second Item", "Third Item"]

Элементтердің бірін массивтен Индекс() функциясы арқылы шығарып, оны мәтінге түрлендіре аламыз.

Text( Index( ParseJSON( jsonStringVariable ), 2 ) ) // "Second Item"