Funkcja JSON

Dotyczy: aplikacje kanwy aplikacje oparte na modelu

Generuje ciąg tekstowy JSON dla tabeli, rekordu lub wartości.

Opis

Funkcja JSON zwraca strukturę danych formatu JavaScript Object Notation (JSON) w postaci fragmentu danych w celu umożliwienia przechowywania lub transmitowania w sieci. [ECMA-404](https://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf i IETF RFC 8259 opisują format, który jest szeroko stosowany w języku JavaScript i innych językach programowania.

Aplikacje kanwy obsługują typy danych, dla których w tej tabeli wymieniono szczegółowe informacje o ich reprezentacji tekstowej:

Typ danych Opis Przykład wyniku
Logiczny True lub false. true
Kolor Ciąg, który zawiera 8-cyfrowe reprezentacje szesnastkowe danego koloru. W tej prezentacji jest format #rrggbbaa, gdzie rr jest składnikiem czerwonym, gg oznacza zieloną wartość, bb to niebieski, a element aa jest kanałem alfa. W przypadku kanału alfa 00 oznacza całkowicie przezroczyste, a ff jest całkowicie nieprzezroczysty. Można przekazać ciąg do funkcji ColorValue. "#102030ff"
Waluta Liczba korzystająca z odpowiedniego separatora dziesiętnego dla języka użytkownika. W razie potrzeby jest używany zapis naukowy. 1.345
Date Ciąg, który zawiera datę w formacie ISO 8601 rrrr-mm-dd. "2019-03-31"
Data/godzina Ciąg, który zawiera datę/godzinę podaną w formacie ISO 8601. Wartości daty i godziny są podane w formacie UTC, ponieważ końcowa litera "Z" tak wskazuje. "2019-03-31T22:32:06.822Z"
Identyfikator GUID Ciąg zawierający wartość identyfikatora GUID. Litery są małymi literami. "751b58ac-380e-4a04-a925-9f375995cc40"
Obraz, Media Jeśli włączony jest określony parametr JSONFormat.IncludeBinaryData, pliki multimedialne są kodowane za pomocą ciągu. Odwołania do sieci Web, które korzystają ze schematu http: lub https: URL, nie są modyfikowane. Odwołania do danych binarnych w pamięci są kodowane w formacie "data:mimetype;base64,...". Dane znajdujące się w pamięci zawierają również obrazy, które zostały zapisane przez użytkowników za pomocą kontrolki Camera oraz inne odwołania za pomocą schematów URL appres: blob:. "data:image/jpeg;base64,/9j/4AA..."
Numer Liczba korzystająca z odpowiedniego separatora dziesiętnego dla języka użytkownika. W razie potrzeby jest używany zapis naukowy. 1.345
Zestaw opcji Liczbowa wartość wybranego rodzaju, a nie etykieta używana do wyświetlania. Ta wartość liczbowa jest używana, ponieważ język jest niezależny. 1001
Time Ciąg zawierający format ISO 8601 hh:mm:ss.fff. "23:12:49.000"
Rekord Lista rozdzielana przecinkami, między innymi pomiędzy { and } pól i ich wartości. Ta notacja przypomina, że w przypadku rekordów w aplikacjach kanwy nazwa jest zawsze między znakami cudzysłowów. W tym formacie nie są obsługiwane rekordy oparte na relacji wiele do jednego. { "First Name": "Fred", "Age": 21 }
Table Lista rozdzielana przecinkami, między [ and ] rekordów. W tym formacie nie są obsługiwane tabele oparte na relacji jeden-do-wielu. Użyj opcji JSONFormat.FlattenValueTables do usuwania rekordu w tabelach z jedną kolumną o nazwie Wartość. [ { "First Name": "Fred", "Age": 21 }, { "First Name": "Jean", "Age": 20 } ]
Dwie opcje Wartość logiczna dwóch opcji true lub false, a nie etykieta użyta do wyświetlenia. Ta wartość logiczna jest używana, ponieważ język jest niezależny. false
Hyperlink, Text Ciąg między znakami podwójnego cudzysłowu. Funkcja powoduje wyjście w osadzonych cudzysłowach podwójnych z odwróconymi kreskami ukośnymi, zastępując je znakiem nowego poziomu "\n" oraz innych standardowych zamianach języka JavaScript. "This is a string."

Określa opcjonalny Format argumentu w celu określenia sposobu, w jaki można odczytać wyniki, oraz sposobu obsługi nieobsługiwanych i binarnych typów danych. Domyślnie wyjście jest możliwie najbardziej zwarte, jak to możliwe, ale nie zawiera niepotrzebnych spacji, wielowierszów, niedozwolonych typów danych ani danych binarnych. Użytkownik może połączyć wiele formatów, określając &operatora.

Encja JSONFormat Podpis
JSONFormat.Compact Wartość domyślna. Wyniki są tak zwarte, jak to możliwe –nie dodano spacji i znaków nowego wiersza.
JSONFormat.FlattenValueTables W tabeli wartości notacja [1,2,3] powoduje utworzenie tabeli zawierającej rekordy, z których każdy rekord ma jedną kolumnę Wartość. W JSON ta sama notacja reprezentuje tablicę trzech liczb. Aby ułatwić interoperacyjność tych dwóch elementów, ta opcja powoduje spłaszczenie tabeli wartości Power Fx do przyjaznej tablicy JSON zamiast tablicy rekordów.
JSONFormat.IndentFour W celu zwiększenia czytelności wyjście zawiera wiersz nowego wiersza dla każdej kolumny i dla każdego poziomu zagnieżdżenia, a dla każdego z nich używane są cztery spacje.
JSONFormat.IncludeBinaryData Wynik zawiera kolumny obrazów, wideo i klipy audio. Ten format może znacznie zwiększyć rozmiar wyniku i pogorszyć wydajność aplikacji.
JSONFormat.IgnoreBinaryData Wynik nie zawiera kolumny obrazów, wideo i klipów audio. Jeśli nie zostanie określona żadne wartości JSONFormat.IncludeBinaryData ani JSONFormat.IgnoreBinaryData, funkcja powoduje błąd podczas napotkania danych binarnych.
JSONFormat.IgnoreUnsupportedTypes Dozwolone są nieobsługiwane typy danych, ale ich wyniki nie będą uwzględniane. Domyślnie w przypadku nieobsługiwanych typów danych jest wyświetlany komunikat o błędzie.

Korzystając z funkcji ShowColumns oraz DropColumns można kontrolować dane, które mają zostać uwzględnione w wynikach oraz usunąć nieobsługiwane typy danych.

Ponieważ JSON może służyć do przeliczania pamięci i obliczenia intensywnego przetwarzania, można używać tej funkcji tylko w funkcjach zachowania. Wyniki z JSON mogą zostać zapisane w zmiennej, której następnie można użyć w ramach przepływu danych.

Jeśli kolumna zawiera zarówno element wyświetlana nazwa, jak i nazwę logiczną, wynik zawiera nazwę logiczną. Nazwy wyświetlane odzwierciedlają język użytkownika aplikacji i dlatego nie są odpowiednie do przeniesienia danych do typowej usługi.

Składnia

JSON( DataStructure [, Format ] )

  • DataStructure – wymagane. Struktura danych, która ma być konwertowana na notację JSON. Obsługiwane są tabele, rekordy i wartości pierwotne, ale są one arbitralnie zagnieżdżone.
  • Format – Optional. Wartość encji JSONFormat. Wartość domyślna to JSONFormat.Compact, co oznacza, że nie dodaje znaków nowego wiersza ani spacji oraz nie blokuje danych binarnych ani nieobsługiwanych kolumn.

Przykłady

Dane hierarchiczne

  1. Wstaw kontrolkę Button i ustaw jej właściwość OnSelect na następującą formułę.

    ClearCollect( CityPopulations,
        { City: "London",    Country: "United Kingdom", Population: 8615000 },
        { City: "Berlin",    Country: "Germany",        Population: 3562000 },
        { City: "Madrid",    Country: "Spain",          Population: 3165000 },
        { City: "Hamburg",   Country: "Germany",        Population: 1760000 },
        { City: "Barcelona", Country: "Spain",          Population: 1602000 },
        { City: "Munich",    Country: "Germany",        Population: 1494000 }
    );
    ClearCollect( CitiesByCountry, GroupBy( CityPopulations, "Country", "Cities" ) )
    
  2. Trzymając wciśnięty klawisz Alt, kliknij przycisk.

    Kolekcja CitiesByCountry jest tworzona z tą strukturą danych, którą można wyświetlić, wybierając Kolekcje w menu Plik a następnie wybierając nazwę kolekcji.

    Kolekcja CitiesByCountry.

    Można również wyświetlić tę kolekcję, wybierając Ustawienia>Nadchodzące funkcje>Włącz widok wyników paska formuły, wybierając nazwę kolekcji na pasku formuł, a następnie wybierając strzałkę w dół obok nazwy kolekcji na pasku formuł.

    Kolekcję na widoku wyników paska formuł.

  3. Wstaw dodatkową kontrolkę Przycisk i ustaw jej właściwość OnSelect na następującą formułę:

    Set( CitiesByCountryJSON, JSON( CitiesByCountry ) )
    

    Ta formuła powoduje ustawienie zmiennej globalnej CitiesByCountryJSON na reprezentację JSON dla CitiesByCountry.

  4. Trzymając wciśnięty klawisz Alt, kliknij przycisk.

  5. Wstaw kontrolkę Label i ustaw jej właściwość Text na następującą zmienną.

    CitiesByCountryJSON
    

    Na etykiecie tego wyniku jest wyświetlany jeden wiersz bez spacji, odpowiedni do transmisji w sieci:

    [
      {
        "Cities": [{ "City": "London", "Population": 8615000 }],
        "Country": "United Kingdom"
      },
      {
        "Cities": [
          { "City": "Berlin", "Population": 3562000 },
          { "City": "Hamburg", "Population": 1760000 },
          { "City": "Munich", "Population": 1494000 }
        ],
        "Country": "Germany"
      },
      {
        "Cities": [
          { "City": "Madrid", "Population": 3165000 },
          { "City": "Barcelona", "Population": 1602000 }
        ],
        "Country": "Spain"
      }
    ]
    
  6. Zmień formułę drugiego przycisku, aby zwiększyć czytelność danych wyjściowych.

    Set( CitiesByCountryJSON, JSON(CitiesByCountry, JSONFormat.IndentFour ))
    
  7. Trzymając wciśnięty klawisz Alt, kliknij drugi przycisk.

    Etykieta zawiera czytelny wynik.

    [
      {
        "Cities": [
          {
            "City": "London",
            "Population": 8615000
          }
        ],
        "Country": "United Kingdom"
      },
      {
        "Cities": [
          {
            "City": "Berlin",
            "Population": 3562000
          },
          {
            "City": "Hamburg",
            "Population": 1760000
          },
          {
            "City": "Munich",
            "Population": 1494000
          }
        ],
        "Country": "Germany"
      },
      {
        "Cities": [
          {
            "City": "Madrid",
            "Population": 3165000
          },
          {
            "City": "Barcelona",
            "Population": 1602000
          }
        ],
        "Country": "Spain"
      }
    ]
    

Obrazy i multimedia w formacie base64

  1. Dodaj kontrolkę Image.

    Wraz z kontrolką staje się dostępne SampleImage.

  2. Dodaj kontrolkę Button i ustaw jej właściwość OnSelect na następującą formułę.

    Set( ImageJSON, JSON( SampleImage, JSONFormat.IncludeBinaryData ) )
    
  3. Trzymając wciśnięty klawisz Alt, kliknij przycisk.

  4. Dodaj etykietę i ustaw dla jej właściwości Text następującą zmienną.

    ImageJSON
    
  5. Zmień rozmiar kontrolki i w razie potrzeby zmniejsz rozmiar czcionki, aby wyświetlić w większości wyniki.

    Etykieta zawiera ciąg tekstowy, który został przechwycony w ramach funkcji JSON.

    "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjxzdmcgdmVyc2lvbj0iMS4xIg0KCSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWxuczphPSJodHRwOi8vbnMuYWRvYmUuY29tL0Fkb2JlU1ZHVmlld2VyRXh0ZW5zaW9ucy8zLjAvIg0KCSB4PSIwcHgiIHk9IjBweCIgd2lkdGg9IjI3MHB4IiBoZWlnaHQ9IjI3MHB4IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNzAgMjcwIiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCgk8ZyBjbGFzcz0ic3QwIj4NCgkJPHJlY3QgeT0iMC43IiBmaWxsPSIjRTlFOUU5IiB3aWR0aD0iMjY5IiBoZWlnaHQ9IjI2OS4zIi8+DQoJCTxwb2x5Z29uIGZpbGw9IiNDQkNCQ0EiIHBvaW50cz0iMjc3LjksMTg3LjEgMjQ1LDE0My40IDE4OC42LDIwMi44IDc1LDgwLjUgLTQuMSwxNjUuMyAtNC4xLDI3MiAyNzcuOSwyNzIiLz4NCgkJPGVsbGlwc2UgZmlsbD0iI0NCQ0JDQSIgY3g9IjIwMi40IiBjeT0iODQuMSIgcng9IjI0LjQiIHJ5PSIyNC4zIi8+DQoJPC9nPg0KPC9zdmc+"
    

Tabele wartości

Ta formuła:

JSON( [1,2,3] )

tworzy ciąg tekstowy [{"Wartość":1},{"Wartość":2},{"Wartość":3}].

Ta sama formuła z opcją JSONFormat.FlattenValueTables:

JSON( [1,2,3], JSONFormat.FlattenValueTables )

tworzy ciąg tekstowy [1,2,3].

Zauważ, że opcja FlattenValueTables nie ma wpływu na używanie notacji z kolekcjami JSON CityPopulations lub CitiesByCountry, ponieważ te tabele nie są tabelami wartości. Tabela Wartość zawiera jedną kolumnę i musi mieć nazwę „Wartość”.