@@ -510,6 +510,82 @@ the page. If you use a dynamic import to lazily-load a JavaScript file and that
510510file imports a CSS file (using the non-dynamic ``import `` syntax), that CSS file
511511will also be downloaded asynchronously.
512512
513+ Importing JSON files
514+ --------------------
515+
516+ .. versionadded :: 7.4
517+
518+ Support for importing JSON assets was added in Symfony 7.4.
519+
520+ AssetMapper allows you to import JSON assets directly from your JavaScript code.
521+ While modern browsers support the native ``import data from './foo.json' with { type: 'json' } `` syntax,
522+ this feature is not yet widely supported. AssetMapper provides a fully compatible alternative
523+ without requiring any bundler.
524+
525+ AssetMapper provides a more compatible alternative by allowing you to import JSON
526+ files using the standard import syntax:
527+
528+ .. code-block :: javascript
529+
530+ // assets/app.js
531+ import dataPromise from ' ./data.json' ;
532+
533+ // The import returns a Promise that resolves to the JSON content
534+ const data = await dataPromise;
535+ console .log (data .name ); // Access your JSON data
536+
537+ Usage Example
538+ ~~~~~~~~~~~~~
539+
540+ Consider a JSON file containing user data:
541+
542+ .. code-block :: json
543+
544+ // assets/data/users.json
545+ {
546+ "users" : [
547+ {"id" : 1 , "name" : " Alice" , "email" : " alice@example.com" },
548+ {"id" : 2 , "name" : " Bob" , "email" : " bob@example.com" }
549+ ]
550+ }
551+
552+ You can import and use this data in your JavaScript:
553+
554+ .. code-block :: javascript
555+
556+ // assets/controllers/user-list-controller.js
557+ import usersPromise from ' ../data/users.json' ;
558+
559+ async function displayUsers () {
560+ const userData = await usersPromise;
561+
562+ userData .users .forEach (user => {
563+ console .log (` ${ user .name } : ${ user .email } ` );
564+ });
565+ }
566+
567+ displayUsers ();
568+
569+ How it Works
570+ ~~~~~~~~~~~~
571+
572+ When you import a JSON file, AssetMapper:
573+
574+ 1. **Detects the JSON import ** in your JavaScript files during asset processing
575+ 2. **Creates a JavaScript module ** that exports a Promise resolving to the JSON content
576+ 3. **Adds it to the importmap ** so your browser can locate and load it correctly
577+ 4. **Versions the file ** like any other asset, ensuring proper cache busting
578+
579+ This approach works in all modern browsers without requiring native JSON import
580+ support, making it a reliable alternative to the newer ``with { type: 'json' } ``
581+ syntax.
582+
583+ .. note ::
584+
585+ Like CSS imports, JSON imports are processed by AssetMapper and added to the
586+ importmap automatically. The imported JSON assets are also versioned, so any
587+ changes to the JSON content will result in a new versioned filename.
588+
513589Issues and Debugging
514590--------------------
515591
0 commit comments