← Back to MAUI Releases
Javier Suárez
Matthew Leibowitz
Shane Neuville
Jonathan Peppers
Gerald Versluis
@cshung
@eerhardt
@sbomer
James Clancey
Jonathan Dick
Dean Ellis
Eilon Lipton
Stéphane Delcroix
@antonfirsov
@TanayParikh
@pranavkm
@pjcollins
James Montemagno
Rui Marinho
@moljac
@SteveSandersonMS
@guardrex
@hartez
Tim Miller
Rachel Kang
@mikeirvingweb
@sps014
@vlada-shubina
@dimonovdd
@billvenhaus
@brunck
6.0.200-preview.14.2
Preview
Contributors
What’s Changed
- [Android] Avoid crash if not set the RefreshColor property - #5092 ([Javier Suárez](https://github.com/jsuarezruiz))
- Respect UserAppTheme in RequestedTheme - #5071 ([Matthew Leibowitz](https://github.com/mattleibow))
- Update SkiaSharp again - #5076 ([Matthew Leibowitz](https://github.com/mattleibow))
- Switch to dispatcher so Dispose is called after DestroyView - #5064 ([Shane Neuville](https://github.com/PureWeen))
- Remove unsupported targets in Device class - #4491 ([Javier Suárez](https://github.com/jsuarezruiz))
- Remove all usage of Device throughout the repo - #4982 ([Matthew Leibowitz](https://github.com/mattleibow))
- Implement IBorder on Windows - #5008 ([Javier Suárez](https://github.com/jsuarezruiz))
- [shell] minor performance improvements - #5013 ([Jonathan Peppers](https://github.com/jonathanpeppers))
- Fix iOS CollectionView update when not visible - #5011 ([Gerald Versluis](https://github.com/jfversluis))
- Add a PropertyMapper for FormattedText - #5029 ([@cshung](https://github.com/cshung))
- Make sure RadioButtonExtensions.UpdateTextColor applies to RadioButton only - #4998 ([@cshung](https://github.com/cshung))
- [Android] Hide Keyboard in Android Entry and Editor when back key is pressed - #4827 ([Javier Suárez](https://github.com/jsuarezruiz))
- Remove Application.Properties implementation - #4976 ([@eerhardt](https://github.com/eerhardt))
- Don’t set the text on android if value matches - #4992 ([Shane Neuville](https://github.com/PureWeen))
- [core] use StringComparison.Ordinal everywhere - #4988 ([Jonathan Peppers](https://github.com/jonathanpeppers))
- Windows FlowDirection - #4936 ([Shane Neuville](https://github.com/PureWeen))
- Update powershell version - #4973 ([@sbomer](https://github.com/sbomer))
- Update DEVELOPMENT.md - #4977 ([James Clancey](https://github.com/Clancey))
- Fix up tests after Shell runs - #4970 ([Shane Neuville](https://github.com/PureWeen))
- Add Emscripten back to rollback file - #4971 ([Jonathan Dick](https://github.com/Redth))
- [Android] Update the DatePicker Dialog if the display info changes - #4815 ([Javier Suárez](https://github.com/jsuarezruiz))
- [iOS] Custom implementation in ScrollView IsEnabled property - #4881 ([Javier Suárez](https://github.com/jsuarezruiz))
- Move TabbedPageHandler to TabbedViewHandler - #4893 ([Shane Neuville](https://github.com/PureWeen))
- [Android] Clear focus and hide keyboard submitting the text or disabling the View - #4828 ([Javier Suárez](https://github.com/jsuarezruiz))
- Remove
IPlatformServices.RequestedThemeand use Essentials - #4964 ([Matthew Leibowitz](https://github.com/mattleibow)) - Use bash to install dotnet rather than sh - #4916 ([Dean Ellis](https://github.com/dellis1972))
- Remove IImageSourceServiceConfiguration - #4954 ([Matthew Leibowitz](https://github.com/mattleibow))
- Update PULL_REQUEST_TEMPLATE.md - #4965 ([@Eilon](https://github.com/Eilon))
- Add more APIs to IDispatcher - #4944 ([Matthew Leibowitz](https://github.com/mattleibow))
- remove generation of __InitComponentRuntime - #4911 ([Stéphane Delcroix](https://github.com/StephaneDelcroix))
- Interfaced handler for SwipeItemView - #4939 ([@antonfirsov](https://github.com/antonfirsov))
- Enable File Picker in Blazor Android WebView - #4928 ([@TanayParikh](https://github.com/TanayParikh))
- Refactor VersionTracking into interface - #4891 ([Jonathan Dick](https://github.com/Redth))
- Implement WebView navigation events - #4443 ([Javier Suárez](https://github.com/jsuarezruiz))
- [android] refactor font loading - #4933 ([Jonathan Peppers](https://github.com/jonathanpeppers))
- [Windows] Detect when image failed to load in Windows ImageButton - #4816 ([Javier Suárez](https://github.com/jsuarezruiz))
- Ensure InvokeAsync(Func
) is properly awaited - #4873 ([@pranavkm](https://github.com/pranavkm)) - IBorder now works again for iOS/Android - #4909 ([James Clancey](https://github.com/Clancey))
- [Android] Hide Keyboard in Android Entry and Editor when back key is pressed - #4827 ([Javier Suárez](https://github.com/jsuarezruiz))
- [iOS][macOS] Remove more superflous version checks - #4906 ([@pjcollins](https://github.com/pjcollins))
- [Essentials] Fix maciOS version checks - #4908 ([@pjcollins](https://github.com/pjcollins))
- [android] add projects to record AOT profiles - #4859 ([Jonathan Peppers](https://github.com/jonathanpeppers))
- Add doc comments for BlazorWebView APIs - #4904 ([@pranavkm](https://github.com/pranavkm))
- Update LICENSE - #4905 ([James Montemagno](https://github.com/jamesmontemagno))
- Implement RefreshViewHandler on Windows - #3299 ([Javier Suárez](https://github.com/jsuarezruiz))
- Interfaced handlers for RefreshView and SearchBar - #4847 ([@antonfirsov](https://github.com/antonfirsov))
- Generate the Windows manifests as well - #2704 ([Matthew Leibowitz](https://github.com/mattleibow))
- Blazor Open Links in Browser with Configurability - #4645 ([@TanayParikh](https://github.com/TanayParikh))
- [iOS] Fix issues running on iOS12 - #4892 ([Rui Marinho](https://github.com/rmarinho))
- Wire up build targets to exclude content items from iOS and Android checks - #4861 ([@pranavkm](https://github.com/pranavkm))
- Refactor SecureStorage into an interface - #4668 ([@antonfirsov](https://github.com/antonfirsov))
- Essentials.FileSystem refactored to interface and singleton - #4633 ([@moljac](https://github.com/moljac))
- Move Android Shell to Compatibility - #4857 ([Shane Neuville](https://github.com/PureWeen))
- Refactor Screenshot to use an interface - #4699 ([@antonfirsov](https://github.com/antonfirsov))
- Moved
GetPlatformSizelogic into a new service - #4885 ([Matthew Leibowitz](https://github.com/mattleibow)) - Refactor Essentials.Launcher into interface - #4886 ([Jonathan Dick](https://github.com/Redth))
- Fix Razor compilation when running inside WPF’s GenerateTemporaryTargetAssembly sub-build - #4884 ([@SteveSandersonMS](https://github.com/SteveSandersonMS))
- Interfaced WebViewHandler, add missing CommandMapper to WindowHandler - #4875 ([@antonfirsov](https://github.com/antonfirsov))
- Interfaced handler for RadioButton - #4846 ([@antonfirsov](https://github.com/antonfirsov))
- Essentials.WebAuthenticator refactored to interface and singleton - #4757 ([@moljac](https://github.com/moljac))
- Menubar - #4839 ([Shane Neuville](https://github.com/PureWeen))
- Interfaced handlers for ShapeView, Slider, Stepper - #4865 ([@antonfirsov](https://github.com/antonfirsov))
- Interfaced handler for Switch and TimePicker - #4872 ([@antonfirsov](https://github.com/antonfirsov))
- Essentials.Magnetometer refactored to interface and singleton - #4652 ([@moljac](https://github.com/moljac))
- Interfaced handlers for Picker and ProgressBar - #4843 ([@antonfirsov](https://github.com/antonfirsov))
- Interfaced handlers for Label, NavigationView, Page - #4841 ([@antonfirsov](https://github.com/antonfirsov))
- Interfaced handler for SwipeItemMenuItem, update ISwipeViewHandler - #4867 ([@antonfirsov](https://github.com/antonfirsov))
- Update LayoutHandler to use current conventions - #4842 ([@antonfirsov](https://github.com/antonfirsov))
- Essentials.Geolocation refactored to interface and singleton - #4634 ([@moljac](https://github.com/moljac))
- Essentials.Compass refactored to interface and singleton - #4615 ([@moljac](https://github.com/moljac))
- Essentials.Gyroscope refactored to interface and singleton - #4649 ([@moljac](https://github.com/moljac))
- Essentials.OrientationSensor refactored to interface and singleton - #4662 ([@moljac](https://github.com/moljac))
- Don’t generate xamlc debug on design time builds - #4858 ([Jonathan Dick](https://github.com/Redth))
- Change ‘Blazor component’ naming - #4856 ([@guardrex](https://github.com/guardrex))
- [iOS] Allow to customize the WebView Delegate using the Mapper - #4854 ([Javier Suárez](https://github.com/jsuarezruiz))
- Force shell creation on UI thread - #4845 ([@hartez](https://github.com/hartez))
- Interfaced IndicatorViewHandler - #4840 ([@antonfirsov](https://github.com/antonfirsov))
- Interfaced BorderHandler and CheckBoxHandler - #4676 ([@antonfirsov](https://github.com/antonfirsov))
- Update ImageHandler and ImageButtonHandler to current conventions - #4784 ([@antonfirsov](https://github.com/antonfirsov))
- Fix tests screenshot - #4833 ([Rui Marinho](https://github.com/rmarinho))
- Add handling and tests for TextTransform for SearchBar/Editor/Entry - #4554 ([@hartez](https://github.com/hartez))
- [iOS] Implement pending custom WKWebKitDelegate in WebViewHandler - #4817 ([Javier Suárez](https://github.com/jsuarezruiz))
- Implement Cookies property in WebView - #4419 ([Javier Suárez](https://github.com/jsuarezruiz))
- [Windows] Implement IsFocused property and Focus(), Unfocus() methods - #4562 ([Javier Suárez](https://github.com/jsuarezruiz))
- Remove dead code from MauiFactory - #4789 ([@eerhardt](https://github.com/eerhardt))
- Essentials.HapticFeedback refactored to interface and singleton - #4651 ([@moljac](https://github.com/moljac))
- Essentials.Vibration refactored to interface and singleton - #4727 ([@moljac](https://github.com/moljac))
- Essentials Barometer - alternate approach - #4761 ([Jonathan Dick](https://github.com/Redth))
- Essentials.Email refactored to interface and singleton - #4623 ([@moljac](https://github.com/moljac))
- [Core] Implement SizeChanged event - #4541 ([Javier Suárez](https://github.com/jsuarezruiz))
- Use unelevated button style on Android - #4722 ([@hartez](https://github.com/hartez))
- Address CreateInstance ILLink warnings - #4769 ([@eerhardt](https://github.com/eerhardt))
- Remove packages not used directly by MAUI [WIP] - #4776 ([Rui Marinho](https://github.com/rmarinho))
- Add pending Picker events and notify items collection changes - #4346 ([Javier Suárez](https://github.com/jsuarezruiz))
- Annotate web Content items to avoid workarounds in Xamarin and iOS SDKs - #4728 ([@pranavkm](https://github.com/pranavkm))
- Interfaced handlers for ContentView, DatePicker, Editor - #4763 ([@antonfirsov](https://github.com/antonfirsov))
- Interfaced handlers for Entry, FlyoutView, GraphicsView - #4780 ([@antonfirsov](https://github.com/antonfirsov))
- In BlazorWebView WinForms/WPF, don’t require wwwroot to exist in bin dir in development - #4782 ([@SteveSandersonMS](https://github.com/SteveSandersonMS))
- [Windows] Implement Border properties in RadioButtonHandler - #4416 ([Javier Suárez](https://github.com/jsuarezruiz))
- Essentials.Browser refactored to interface and singleton - #4605 ([@moljac](https://github.com/moljac))
- Essentials.TextToSpeech refactored to interface and singleton - #4747 ([@moljac](https://github.com/moljac))
- Essentials.Clipboard refactored to interface and singleton - #4612 ([@moljac](https://github.com/moljac))
- Essentials.Connectivity refactored to interface and singleton - #4622 ([@moljac](https://github.com/moljac))
- [Android] Implement IsFocused property and Focus(), Unfocus() methods - #4587 ([Javier Suárez](https://github.com/jsuarezruiz))
- Essentials.AppActions refactored to interface and singleton - #4596 ([@moljac](https://github.com/moljac))
- [WinUI] Use XamlRoot for GetViewTransform - #4689 ([Tim Miller](https://github.com/drasticactions))
- Remove debug checks - #4738 ([@Eilon](https://github.com/Eilon))
- [iOS] Implement IsFocused property and Focus(), Unfocus() methods - #4588 ([Javier Suárez](https://github.com/jsuarezruiz))
- [templates] define a %(BaseSize) for images - #4759 ([Jonathan Peppers](https://github.com/jonathanpeppers))
- Allow to use string to define StrokeShape in XAML - #3256 ([Javier Suárez](https://github.com/jsuarezruiz))
- [iOS, Catalyst] Shell View Handler - #4616 ([Shane Neuville](https://github.com/PureWeen))
- Add GetHostedWindow - #4706 ([Tim Miller](https://github.com/drasticactions))
- remove RegisterSourceInfo from Xamlc - #4710 ([Stéphane Delcroix](https://github.com/StephaneDelcroix))
- use TypeRefComparer for finding converters - #4713 ([Stéphane Delcroix](https://github.com/StephaneDelcroix))
- Essentials.Battery refactored to interface and singleton - #4629 ([@moljac](https://github.com/moljac))
- Refactor Share to use an interface - #4674 ([@antonfirsov](https://github.com/antonfirsov))
- Update current .NET MAUI version in bug issue template - #4718 ([Gerald Versluis](https://github.com/jfversluis))
- Remove storage read from essentials android - file/media picker - #4697 ([James Montemagno](https://github.com/jamesmontemagno))
- Refactor Accelerometer into an interface - #4630 ([@antonfirsov](https://github.com/antonfirsov))
- Shapes Handlers - #4472 ([Javier Suárez](https://github.com/jsuarezruiz))
- Renaming public APIs Native —> Platform - #4599 ([Rachel Kang](https://github.com/rachelkang))
- Refactor SemanticScreenReader to use an interface - #4673 ([@antonfirsov](https://github.com/antonfirsov))
- Initial work to get unpackaged WinUI apps - #4460 ([Matthew Leibowitz](https://github.com/mattleibow))
- Some optimization to speed up device test discovery - #4698 ([@hartez](https://github.com/hartez))
- [tests] Add Task.Delay to some unreliable tests - #4637 ([Rui Marinho](https://github.com/rmarinho))
- Essentials.MediaPicker refactored to interface and singleton - #4663 ([@moljac](https://github.com/moljac))
- Implement image caching functionality for iOS - #4515 ([Rachel Kang](https://github.com/rachelkang))
- Identify Setter property target in VSG case - #4607 ([Stéphane Delcroix](https://github.com/StephaneDelcroix))
- [iOS] Replace UIDevice.CheckSystemVersion checks - #4635 ([@pjcollins](https://github.com/pjcollins))
- Remove IToolbar from IStackNavigationView - #4654 ([Shane Neuville](https://github.com/PureWeen))
- Add ExecutionPolicy and NoProfile to powershell command - #4678 ([@eerhardt](https://github.com/eerhardt))
- [Android] Fix the math for GenerateAdornerOffset - #4677 ([Tim Miller](https://github.com/drasticactions))
- use compiled converter for Color - #4687 ([Stéphane Delcroix](https://github.com/StephaneDelcroix))
- [Core] Implement IsReadOnly property in SearchBar - #3391 ([Javier Suárez](https://github.com/jsuarezruiz))
- Update Android Gallery to use Maui - #1558 ([Shane Neuville](https://github.com/PureWeen))
- Fix cell parenting when using Retain Caching - #4636 ([Shane Neuville](https://github.com/PureWeen))
- [Windows] CarouselViewHandler - #4200 ([Javier Suárez](https://github.com/jsuarezruiz))
- [iOS] Add pending events in EntryHandler - #4347 ([Javier Suárez](https://github.com/jsuarezruiz))
- product name / terminology corrections - #4661 ([@mikeirvingweb](https://github.com/mikeirvingweb))
- [WinUI] Fix Flyout Background Color and Locked Flyout Margins - #4639 ([Shane Neuville](https://github.com/PureWeen))
- [Android] Implement RadioButton Border properties - #4626 ([Javier Suárez](https://github.com/jsuarezruiz))
- Moved IPlatformServices.GetNamedSize into a separate service - #4570 ([Matthew Leibowitz](https://github.com/mattleibow))
- Refactored Preferences into an Interface - #4582 ([@sps014](https://github.com/sps014))
- Run BlazorWebView tests only on Android API level 28+ - #4625 ([@SteveSandersonMS](https://github.com/SteveSandersonMS))
- Make sure to use the correct p/invoke for 32-bit - #4600 ([Matthew Leibowitz](https://github.com/mattleibow))
- Remove all GetAssemblies() implementations - #4583 ([Matthew Leibowitz](https://github.com/mattleibow))
- Refactored SMS into an Interface - #4584 ([@sps014](https://github.com/sps014))
- iOS TabbedPage and NavigationPage measuring fixes - #4576 ([Shane Neuville](https://github.com/PureWeen))
- Allow to create custom layouts using Layout
- #4558 ([Javier Suárez](https://github.com/jsuarezruiz)) - Refactored Map to an interface - #4557 ([@sps014](https://github.com/sps014))
- Make Device.Idiom and Device.RuntimePlatform use Essentials - #4548 ([Matthew Leibowitz](https://github.com/mattleibow))
- iOS NavigationRend-andler - #3969 ([Shane Neuville](https://github.com/PureWeen))
- Add CarouselView handlers on Controls [iOS] - #3141 ([Rui Marinho](https://github.com/rmarinho))
- Contacts Refactored to Singleton/Interface - #4539 ([@sps014](https://github.com/sps014))
- fix copyright headers - #4560 ([Stéphane Delcroix](https://github.com/StephaneDelcroix))
- Increase BlazorWebView test timeouts - #4543 ([@SteveSandersonMS](https://github.com/SteveSandersonMS))
- refactored Geocoding to an interface - #4527 ([@sps014](https://github.com/sps014))
- Removed obsolete APIs from project templates - #4535 ([Javier Suárez](https://github.com/jsuarezruiz))
- Template xaml encoding - #4532 ([Stéphane Delcroix](https://github.com/StephaneDelcroix))
- Remove MS.Extensions.Hosting from Maui - #4505 ([@eerhardt](https://github.com/eerhardt))
- Flyout should always update the details when it changes. - #4519 ([James Clancey](https://github.com/Clancey))
- Refactor FlashLight to use an Interface - #4525 ([@sps014](https://github.com/sps014))
- Refactor DeviceInfo to use an interface - #4465 ([Matthew Leibowitz](https://github.com/mattleibow))
- [templates] add xml encoding directive - #4495 ([Stéphane Delcroix](https://github.com/StephaneDelcroix))
- EvaluateJavaScriptAsync with CommandMapper (Version 2) - #4507 ([@hartez](https://github.com/hartez))
- Shell WinUI Handler - #4501 ([Shane Neuville](https://github.com/PureWeen))
- Don’t force a min size of zero for controls - #4422 ([@hartez](https://github.com/hartez))
- Remove
IPlatformInvalidateandDevice.Invalidate()- #4479 ([Matthew Leibowitz](https://github.com/mattleibow)) - Refactor PhoneDialer into interface - #4466 ([Jonathan Dick](https://github.com/Redth))
- Refactor AppInfo into interface - #4464 ([Jonathan Dick](https://github.com/Redth))
- Remove Device.Flags/SetFlags() - #4478 ([Matthew Leibowitz](https://github.com/mattleibow))
- Delete the extra UAP project - #4494 ([Matthew Leibowitz](https://github.com/mattleibow))
- Remove Device.GetNamedColor - #4492 ([Matthew Leibowitz](https://github.com/mattleibow))
- updated Microsoft.TemplateEngine.Tasks version - #4489 ([@vlada-shubina](https://github.com/vlada-shubina))
- Add microsoft.net.workload.mono.toolchain back into the rollback.json - #4481 ([Matthew Leibowitz](https://github.com/mattleibow))
- Essentials: Port xamarin/Essentials#1760 - #2763 ([@dimonovdd](https://github.com/dimonovdd))
- Fix INativeViewHandler to return more expected NativeView - #4432 ([Shane Neuville](https://github.com/PureWeen))
- Remove ambiguity in updates in WinUI - #4454 ([Matthew Leibowitz](https://github.com/mattleibow))
- Backport preview 13 fixes - #4434 ([Jonathan Dick](https://github.com/Redth))
- Add drag-drop item reordering to CollectionView #3767 - #3768 ([@billvenhaus](https://github.com/billvenhaus))
- [WinUI] Wire up the rest of the TabbedPage properties - #4429 ([Shane Neuville](https://github.com/PureWeen))
- Shell page dependency injection now uses IServiceProvider.GetService() - #4281 ([@brunck](https://github.com/brunck))
New Contributors
- @billvenhaus made their first contribution in https://github.com/dotnet/maui/pull/3768
- @vlada-shubina made their first contribution in https://github.com/dotnet/maui/pull/4489
- @sps014 made their first contribution in https://github.com/dotnet/maui/pull/4525
- @SteveSandersonMS made their first contribution in https://github.com/dotnet/maui/pull/4543
- @mikeirvingweb made their first contribution in https://github.com/dotnet/maui/pull/4661
- @moljac made their first contribution in https://github.com/dotnet/maui/pull/4663
- @pranavkm made their first contribution in https://github.com/dotnet/maui/pull/4728
- @guardrex made their first contribution in https://github.com/dotnet/maui/pull/4856
- Dean Ellis made their first contribution in https://github.com/dotnet/maui/pull/4916
- @sbomer made their first contribution in https://github.com/dotnet/maui/pull/4973
Full Changelog: https://github.com/dotnet/maui/compare/6.0.200-preview.13.2…6.0.200-preview.14.2
Known Issues
- 6.0.300 SDK workload CLI cannot install Preview 14 workloads on macOS
- Visual Studio 17.2 Preview 2.0 connects to a remote iOS build agent but cannot debug an iOS app (NOTE: This will be fixed in an upcoming 17.2 Preview servicing release)
macOS / macOS Build Host Preview 14 installation workaround:
- Install the latest 6.0.201 SDK: https://dotnet.microsoft.com/en-us/download/dotnet/6.0
- Install a preview of the 6.0.300 SDK: https://github.com/dotnet/installer#table
- Open a terminal window
- Create a new working folder:
mkdir ./p14andcd ./p14 - Create a global.json file to use the 6.0.201 SDK version specifically:
dotnet new globaljson --sdk-version 6.0.201 - Run the following workload command to install iOS:
sudo dotnet workload install ios \
--from-rollback-file https://aka.ms/dotnet/maui/preview.14.json
--source https://api.nuget.org/v3/index.json
- Delete the global.json file
rm ./global.json - Delete the 6.0.3xx sdk workload manifests from your global install if they exist, and replace them with the ones the previous command just installed into the 6.0.2xx manifests folder (note: the default global dotnet SDK location is assumed):
sudo rm -rf /usr/local/share/dotnet/sdk-manifests/6.0.300/*
sudo cp -R /usr/local/share/dotnet/sdk-manifests/6.0.200/* /usr/local/share/dotnet/sdk-manifests/6.0.300
- Run the following workload command to install the copied manifests into the 6.0.3xx SDK:
sudo dotnet workload install ios \
--skip-manifest-update \
--from-rollback-file https://aka.ms/dotnet/maui/preview.14.json \
--source https://api.nuget.org/v3/index.json
- Next, fix the remote iOS build host SDK’s installation (this assumes you are logged in as the same user you will connect to from windows, otherwise replace the user path as appropriate):
rm -rf ~/Library/Caches/Xamarin/XMA/SDKs/dotnet/sdk-manifests/6.0.300/*
cp -R /usr/local/share/dotnet/sdk-manifests/6.0.200/* ~/Library/Caches/Xamarin/XMA/SDKs/dotnet/sdk-manifests/6.0.300
- Run the workload command in the build host sdk install directory:
~/Library/Caches/Xamarin/XMA/SDKs/dotnet/dotnet workload install ios \
--skip-manifest-update \
--from-rollback-file https://aka.ms/dotnet/maui/preview.14.json \
--source https://api.nuget.org/v3/index.json