py-json-analyzer 0.1.3__tar.gz → 0.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. py_json_analyzer-0.3.0/PKG-INFO +492 -0
  2. py_json_analyzer-0.3.0/README.md +473 -0
  3. py_json_analyzer-0.3.0/json_explorer/__init__.py +1 -0
  4. py_json_analyzer-0.3.0/json_explorer/analyzer.py +262 -0
  5. {py_json_analyzer-0.1.3 → py_json_analyzer-0.3.0}/json_explorer/cli.py +3 -1
  6. py_json_analyzer-0.3.0/json_explorer/codegen/__init__.py +230 -0
  7. py_json_analyzer-0.3.0/json_explorer/codegen/cli_integration.py +669 -0
  8. py_json_analyzer-0.3.0/json_explorer/codegen/core/__init__.py +98 -0
  9. py_json_analyzer-0.3.0/json_explorer/codegen/core/config.py +345 -0
  10. py_json_analyzer-0.3.0/json_explorer/codegen/core/generator.py +378 -0
  11. py_json_analyzer-0.3.0/json_explorer/codegen/core/naming.py +337 -0
  12. py_json_analyzer-0.3.0/json_explorer/codegen/core/schema.py +582 -0
  13. py_json_analyzer-0.3.0/json_explorer/codegen/core/templates.py +284 -0
  14. py_json_analyzer-0.3.0/json_explorer/codegen/interactive.py +779 -0
  15. py_json_analyzer-0.3.0/json_explorer/codegen/languages/__init__.py +189 -0
  16. py_json_analyzer-0.3.0/json_explorer/codegen/languages/go/__init__.py +37 -0
  17. py_json_analyzer-0.3.0/json_explorer/codegen/languages/go/config.py +225 -0
  18. py_json_analyzer-0.3.0/json_explorer/codegen/languages/go/generator.py +333 -0
  19. py_json_analyzer-0.3.0/json_explorer/codegen/languages/go/interactive.py +279 -0
  20. py_json_analyzer-0.3.0/json_explorer/codegen/languages/go/naming.py +103 -0
  21. py_json_analyzer-0.3.0/json_explorer/codegen/languages/python/__init__.py +43 -0
  22. py_json_analyzer-0.3.0/json_explorer/codegen/languages/python/config.py +328 -0
  23. py_json_analyzer-0.3.0/json_explorer/codegen/languages/python/generator.py +422 -0
  24. py_json_analyzer-0.3.0/json_explorer/codegen/languages/python/interactive.py +344 -0
  25. py_json_analyzer-0.3.0/json_explorer/codegen/languages/python/naming.py +157 -0
  26. py_json_analyzer-0.3.0/json_explorer/codegen/registry.py +395 -0
  27. {py_json_analyzer-0.1.3 → py_json_analyzer-0.3.0}/json_explorer/interactive.py +31 -17
  28. {py_json_analyzer-0.1.3 → py_json_analyzer-0.3.0}/json_explorer/main.py +60 -7
  29. {py_json_analyzer-0.1.3 → py_json_analyzer-0.3.0}/json_explorer/search.py +1 -1
  30. {py_json_analyzer-0.1.3 → py_json_analyzer-0.3.0}/json_explorer/stats.py +1 -1
  31. py_json_analyzer-0.3.0/py_json_analyzer.egg-info/PKG-INFO +492 -0
  32. py_json_analyzer-0.3.0/py_json_analyzer.egg-info/SOURCES.txt +63 -0
  33. {py_json_analyzer-0.1.3 → py_json_analyzer-0.3.0}/py_json_analyzer.egg-info/requires.txt +4 -2
  34. {py_json_analyzer-0.1.3 → py_json_analyzer-0.3.0}/pyproject.toml +6 -4
  35. {py_json_analyzer-0.1.3 → py_json_analyzer-0.3.0}/setup.cfg +7 -5
  36. py_json_analyzer-0.3.0/tests/test_gen_conftest.py +54 -0
  37. py_json_analyzer-0.3.0/tests/test_gen_core_config.py +92 -0
  38. py_json_analyzer-0.3.0/tests/test_gen_core_naming.py +81 -0
  39. py_json_analyzer-0.3.0/tests/test_gen_core_schema.py +161 -0
  40. py_json_analyzer-0.3.0/tests/test_gen_edge.py +512 -0
  41. py_json_analyzer-0.3.0/tests/test_gen_error_handling.py +27 -0
  42. py_json_analyzer-0.3.0/tests/test_gen_integration.py +185 -0
  43. py_json_analyzer-0.3.0/tests/test_gen_performance.py +37 -0
  44. py_json_analyzer-0.3.0/tests/test_gen_registry.py +110 -0
  45. py_json_analyzer-0.3.0/tests/test_gen_templates.py +32 -0
  46. py_json_analyzer-0.3.0/tests/test_go_generator.py +187 -0
  47. py_json_analyzer-0.3.0/tests/test_python_generator.py +230 -0
  48. py_json_analyzer-0.1.3/PKG-INFO +0 -261
  49. py_json_analyzer-0.1.3/README.md +0 -244
  50. py_json_analyzer-0.1.3/json_explorer/__init__.py +0 -1
  51. py_json_analyzer-0.1.3/json_explorer/analyzer.py +0 -196
  52. py_json_analyzer-0.1.3/py_json_analyzer.egg-info/PKG-INFO +0 -261
  53. py_json_analyzer-0.1.3/py_json_analyzer.egg-info/SOURCES.txt +0 -30
  54. {py_json_analyzer-0.1.3 → py_json_analyzer-0.3.0}/LICENSE +0 -0
  55. {py_json_analyzer-0.1.3 → py_json_analyzer-0.3.0}/json_explorer/__main__.py +0 -0
  56. {py_json_analyzer-0.1.3 → py_json_analyzer-0.3.0}/json_explorer/filter_parser.py +0 -0
  57. {py_json_analyzer-0.1.3 → py_json_analyzer-0.3.0}/json_explorer/tree_view.py +0 -0
  58. {py_json_analyzer-0.1.3 → py_json_analyzer-0.3.0}/json_explorer/utils.py +0 -0
  59. {py_json_analyzer-0.1.3 → py_json_analyzer-0.3.0}/json_explorer/visualizer.py +0 -0
  60. {py_json_analyzer-0.1.3 → py_json_analyzer-0.3.0}/py_json_analyzer.egg-info/dependency_links.txt +0 -0
  61. {py_json_analyzer-0.1.3 → py_json_analyzer-0.3.0}/py_json_analyzer.egg-info/entry_points.txt +0 -0
  62. {py_json_analyzer-0.1.3 → py_json_analyzer-0.3.0}/py_json_analyzer.egg-info/top_level.txt +0 -0
  63. {py_json_analyzer-0.1.3 → py_json_analyzer-0.3.0}/setup.py +0 -0
  64. {py_json_analyzer-0.1.3 → py_json_analyzer-0.3.0}/tests/__init__.py +0 -0
  65. {py_json_analyzer-0.1.3 → py_json_analyzer-0.3.0}/tests/test_analyzer.py +0 -0
  66. {py_json_analyzer-0.1.3 → py_json_analyzer-0.3.0}/tests/test_search.py +0 -0
  67. {py_json_analyzer-0.1.3 → py_json_analyzer-0.3.0}/tests/test_stats.py +0 -0
  68. {py_json_analyzer-0.1.3 → py_json_analyzer-0.3.0}/tests/test_tree_view.py +0 -0
  69. {py_json_analyzer-0.1.3 → py_json_analyzer-0.3.0}/tests/test_utils.py +0 -0
  70. {py_json_analyzer-0.1.3 → py_json_analyzer-0.3.0}/tests/test_visualizer.py +0 -0
@@ -0,0 +1,492 @@
1
+ Metadata-Version: 2.4
2
+ Name: py-json-analyzer
3
+ Version: 0.3.0
4
+ Summary: A powerful CLI and Python library for analyzing, visualizing, exploring, and generating code from JSON data
5
+ Author: MS-32154
6
+ Author-email: MS-32154 <msttoffg@gmail.com>
7
+ License-Expression: MIT
8
+ Requires-Python: >=3.7
9
+ Description-Content-Type: text/markdown
10
+ License-File: LICENSE
11
+ Requires-Dist: numpy
12
+ Requires-Dist: requests
13
+ Requires-Dist: rich
14
+ Requires-Dist: matplotlib
15
+ Requires-Dist: dateparser
16
+ Requires-Dist: jinja2
17
+ Requires-Dist: windows-curses; sys_platform == "win32"
18
+ Dynamic: license-file
19
+
20
+ [![PyPI version](https://img.shields.io/pypi/v/py-json-analyzer.svg)](https://pypi.org/project/py-json-analyzer/)
21
+ [![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/)
22
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
23
+
24
+ # JSON Explorer
25
+
26
+ **JSON Explorer** is a powerful CLI and Python library for analyzing, visualizing, exploring, and generating code from JSON data.
27
+
28
+ ---
29
+
30
+ ## Features
31
+
32
+ ### Analysis & Exploration
33
+
34
+ - View JSON as a tree (compact, raw, or analytical)
35
+ - Search by key, value, key-value pairs, or custom filter expressions
36
+ - Generate statistical summaries and insights
37
+ - Create visualizations in terminal, browser, or matplotlib
38
+ - Interactive terminal exploration mode
39
+
40
+ ### Code Generation
41
+
42
+ - Generate strongly-typed data structures from JSON
43
+ - Multiple language support (Go, Python, with TypeScript and Rust coming soon)
44
+ - Smart type detection and conflict resolution
45
+ - Configurable naming conventions and templates
46
+ - JSON serialization tags and annotations
47
+ - Interactive configuration and preview
48
+
49
+ ### Library Features
50
+
51
+ - Usable as a Python library with modular components
52
+ - Extensible architecture for custom generators
53
+ - Template-based code generation
54
+ - Configuration profiles and validation
55
+
56
+ ---
57
+
58
+ ## Requirements
59
+
60
+ - Python >= 3.11
61
+
62
+ Required packages:
63
+
64
+ ```
65
+ numpy==2.3.2
66
+ requests==2.32.5
67
+ rich==14.1.0
68
+ setuptools==80.9.0
69
+ matplotlib==3.10.5
70
+ dateparser==1.2.2
71
+ jinja2>=3.0.0
72
+ ```
73
+
74
+ > Note: On Windows, the `windows-curses` package will be installed automatically to enable terminal UI features.
75
+
76
+ ---
77
+
78
+ ## Installation
79
+
80
+ ### From PyPI
81
+
82
+ ```bash
83
+ pip install py-json-analyzer
84
+ ```
85
+
86
+ Upgrade to the latest version:
87
+
88
+ ```bash
89
+ pip install --upgrade py-json-analyzer
90
+ ```
91
+
92
+ ### From Source
93
+
94
+ ```bash
95
+ git clone https://github.com/MS-32154/py-json-analyzer
96
+ cd json_explorer
97
+ pip install .
98
+ ```
99
+
100
+ ### Development Mode
101
+
102
+ ```bash
103
+ pip install -e .
104
+ ```
105
+
106
+ ---
107
+
108
+ ## Running Tests
109
+
110
+ ```bash
111
+ pytest
112
+ ```
113
+
114
+ ### Test Coverage
115
+
116
+ The project includes comprehensive tests for:
117
+
118
+ - **Core modules**: Analysis, search, statistics, tree view, plotting
119
+ - **Codegen core modules**: Naming, schema, configuration, templates
120
+ - **Generators**: Go and Python with all styles
121
+ - **Codegen registry**: Language registration and lookup
122
+ - **Codegen integration**: End-to-end workflows
123
+ - **Edge cases**: None handling, conflicts, deep nesting
124
+
125
+ Run specific test suites:
126
+
127
+ ```bash
128
+ # Core functionality
129
+ pytest tests/test_core.py -v
130
+
131
+ # Go generator
132
+ pytest tests/test_go_generator.py -v
133
+
134
+ # Python generator
135
+ pytest tests/test_python_generator.py -v
136
+ ```
137
+
138
+ ---
139
+
140
+ ## CLI Usage
141
+
142
+ ```
143
+ json_explorer [-h] [--url URL] [--interactive] [--tree {compact,analysis,raw}]
144
+ [--search SEARCH] [--search-type {key,value,pair,filter}]
145
+ [--search-value SEARCH_VALUE] [--search-mode {exact,contains,regex,startswith,endswith,case_insensitive}]
146
+ [--tree-results] [--stats] [--detailed] [--plot] [--plot-format {terminal,matplotlib,browser,all}]
147
+ [--save-path SAVE_PATH] [--no-browser]
148
+ [--generate LANGUAGE] [--output FILE] [--config FILE] [--package-name NAME] [--root-name NAME]
149
+ [--list-languages] [--language-info LANGUAGE] [--verbose]
150
+ [file]
151
+
152
+ JSON Explorer - Analyze, visualize, explore, and generate code from JSON data
153
+
154
+ positional arguments:
155
+ file Path to JSON file
156
+
157
+ options:
158
+ -h, --help show this help message and exit
159
+ --url URL URL to fetch JSON from
160
+ --interactive, -i Run in interactive mode
161
+
162
+ analysis options:
163
+ --tree {compact,analysis,raw}
164
+ Display JSON tree structure
165
+ --stats Show statistics
166
+ --detailed Show detailed analysis/statistics
167
+
168
+ search options:
169
+ --search SEARCH Search query or filter expression
170
+ --search-type {key,value,pair,filter}
171
+ Type of search to perform
172
+ --search-value SEARCH_VALUE
173
+ Value to search for (used with --search-type pair)
174
+ --search-mode {exact,contains,regex,startswith,endswith,case_insensitive}
175
+ Search mode
176
+ --tree-results Display search results in tree format
177
+
178
+ visualization options:
179
+ --plot Generate visualizations
180
+ --plot-format {terminal,matplotlib,browser,all}
181
+ Visualization format
182
+ --save-path SAVE_PATH
183
+ Path to save visualizations
184
+ --no-browser Don't open browser for HTML visualizations
185
+
186
+ code generation options:
187
+ --generate LANGUAGE, -g LANGUAGE
188
+ Generate code in specified language
189
+ --output FILE, -o FILE
190
+ Output file for generated code (default: stdout)
191
+ --config FILE JSON configuration file for code generation
192
+ --package-name NAME Package/namespace name for generated code
193
+ --root-name NAME Name for the root data structure (default: Root)
194
+ --list-languages List supported target languages and exit
195
+ --language-info LANGUAGE
196
+ Show detailed information about a specific language
197
+ --verbose Show generation result metadata
198
+
199
+ common generation options:
200
+ --no-comments Don't generate comments in output code
201
+ --struct-case {pascal,camel,snake}
202
+ Case style for struct/class names
203
+ --field-case {pascal,camel,snake}
204
+ Case style for field names
205
+
206
+ Go-specific options:
207
+ --no-pointers Don't use pointers for optional fields in Go
208
+ --no-json-tags Don't generate JSON struct tags in Go
209
+ --no-omitempty Don't add omitempty to JSON tags in Go
210
+ --json-tag-case {original,snake,camel}
211
+ Case style for JSON tag names in Go
212
+
213
+ Python-specific options:
214
+ --python-style {dataclass,pydantic,typeddict}
215
+ Python code style (default: dataclass)
216
+ --no-slots Don't use __slots__ in dataclasses
217
+ --frozen Make dataclasses frozen (immutable)
218
+ --kw-only Make dataclass fields keyword-only
219
+ --no-pydantic-field Don't use Field() in Pydantic models
220
+ --pydantic-forbid-extra
221
+ Forbid extra fields in Pydantic models
222
+ ```
223
+
224
+ ### Examples
225
+
226
+ **Basic Analysis:**
227
+
228
+ ```bash
229
+ json_explorer data.json --interactive
230
+ json_explorer data.json --tree compact --stats
231
+ json_explorer --url https://api.example.com/data --plot
232
+ ```
233
+
234
+ **Search Examples:**
235
+
236
+ ```bash
237
+ json_explorer data.json --search "name" --search-type key
238
+ json_explorer data.json --search "isinstance(value, int) and value > 10" --search-type filter
239
+ ```
240
+
241
+ **Code Generation Examples:**
242
+
243
+ ```bash
244
+ # List supported languages
245
+ json_explorer --list-languages
246
+
247
+ # Generate Go structs
248
+ json_explorer data.json --generate go --output models.go
249
+
250
+ # Generate Python dataclasses
251
+ json_explorer data.json --generate python --output models.py
252
+
253
+ # Generate Pydantic models
254
+ json_explorer data.json --generate python --python-style pydantic --output models.py
255
+
256
+ # Generate with custom configuration
257
+ json_explorer data.json --generate go --package-name models --root-name User
258
+
259
+ # Interactive code generation
260
+ json_explorer data.json --interactive # Then select code generation menu
261
+ ```
262
+
263
+ ### Screenshots
264
+
265
+ **Main Interactive Mode:**
266
+ ![interactive-mode](/screenshots/main.gif)
267
+
268
+ **Code Generation Interface:**
269
+ ![code generation interface - Go](/screenshots/codegen_go.gif)
270
+
271
+ ---
272
+
273
+ ## Library Usage
274
+
275
+ ### Analysis & Exploration
276
+
277
+ ```python
278
+ from json_explorer.stats import DataStatsAnalyzer
279
+ from json_explorer.analyzer import analyze_json
280
+ from json_explorer.search import JsonSearcher, SearchMode
281
+ from json_explorer.tree_view import print_json_analysis
282
+ from json_explorer.visualizer import JSONVisualizer
283
+
284
+ test_data = {
285
+ "users": [
286
+ {
287
+ "id": 1,
288
+ "name": "Alice",
289
+ "profile": {"age": 30, "settings": {"theme": "dark"}},
290
+ "tags": ["admin", "user"]
291
+ }
292
+ ],
293
+ "metadata": {"total": 1, "created": "2024-01-01"}
294
+ }
295
+
296
+ # Statistical analysis
297
+ analyzer = DataStatsAnalyzer()
298
+ analyzer.print_summary(test_data, detailed=True)
299
+
300
+ # Structure inference
301
+ summary = analyze_json(test_data)
302
+ print(summary)
303
+
304
+ # Search functionality
305
+ searcher = JsonSearcher()
306
+
307
+ results = searcher.search_keys(test_data, "settings", SearchMode.CONTAINS) # Search keys containing "settings"
308
+
309
+ results = searcher.search_values(test_data, "@", SearchMode.CONTAINS, value_types={str}) # Search for values containing '@'
310
+
311
+ results = searcher.search_key_value_pairs(
312
+ test_data,
313
+ key_pattern="tags",
314
+ value_pattern="user",
315
+ value_mode=SearchMode.CONTAINS,
316
+ ) # Searching for 'key' = 'tags' and values containing 'user'
317
+
318
+ results = searcher.search_with_filter(
319
+ test_data,
320
+ lambda k, v, d: isinstance(v, (int, float)) and v > 10
321
+ ) # Filter values > 10
322
+ searcher.print_results(results, show_tree=True)
323
+
324
+ # Tree visualization
325
+ print_json_analysis(test_data, "Sample Data", show_raw=True)
326
+
327
+ # Data visualizations
328
+ visualizer = JSONVisualizer()
329
+ visualizer.visualize(test_data, output="terminal", detailed=True) # 'terminal', 'matplotlib', or 'browser' output
330
+ ```
331
+
332
+ ### Code Generation
333
+
334
+ ```python
335
+ from json_explorer.codegen import (
336
+ generate_from_analysis,
337
+ quick_generate,
338
+ list_supported_languages,
339
+ get_language_info,
340
+ create_config
341
+ )
342
+ from json_explorer.analyzer import analyze_json
343
+
344
+ # Quick generation - Go
345
+ go_code = quick_generate(test_data, language="go")
346
+ print(go_code)
347
+
348
+ # Quick generation - Python dataclass
349
+ python_code = quick_generate(test_data, language="python", style="dataclass")
350
+ print(python_code)
351
+
352
+ # Quick generation - Pydantic model
353
+ pydantic_code = quick_generate(test_data, language="python", style="pydantic")
354
+ print(pydantic_code)
355
+
356
+ # Detailed generation workflow
357
+ analysis = analyze_json(test_data)
358
+ config = create_config(
359
+ language="go",
360
+ package_name="models",
361
+ add_comments=True
362
+ )
363
+ result = generate_from_analysis(analysis, "go", config, "User")
364
+
365
+ if result.success:
366
+ print(result.code)
367
+ if result.warnings:
368
+ print("Warnings:", result.warnings)
369
+
370
+ # List available languages and info
371
+ languages = list_supported_languages()
372
+ print("Supported languages:", languages)
373
+
374
+ go_info = get_language_info("go")
375
+ print("Go generator info:", go_info)
376
+
377
+ python_info = get_language_info("python")
378
+ print("Python generator info:", python_info)
379
+
380
+ # Interactive code generation
381
+ from json_explorer.codegen.interactive import CodegenInteractiveHandler
382
+
383
+ handler = CodegenInteractiveHandler(test_data)
384
+ handler.run_interactive() # Launches interactive interface
385
+ ```
386
+
387
+ ### Supported Languages
388
+
389
+ | Language | Status | Features |
390
+ | -------------- | --------------- | --------------------------------------------------- |
391
+ | **Go** | ✅ Full Support | Structs, JSON tags, pointers, configurable types |
392
+ | **Python** | ✅ Full Support | Dataclasses, Pydantic models, TypedDict, type hints |
393
+ | **TypeScript** | 🚧 Coming Soon | Interfaces, types, optional properties |
394
+ | **Rust** | 🚧 Coming Soon | Structs, Serde annotations, Option types |
395
+
396
+ ### Code Generation Features
397
+
398
+ - **Smart Type Detection**: Handles mixed types, conflicts, and unknown values
399
+ - **Configurable Output**: Multiple templates and naming conventions
400
+ - **Language-Specific Options**: Tailored features for each target language
401
+ - **Validation & Warnings**: Comprehensive validation with helpful warnings
402
+ - **Template System**: Extensible Jinja2-based template architecture
403
+ - **Interactive Configuration**: Guided setup with preview and validation
404
+
405
+ ---
406
+
407
+ ## Configuration
408
+
409
+ ### Go Configuration Example
410
+
411
+ ```json
412
+ {
413
+ "package_name": "models",
414
+ "add_comments": true,
415
+ "generate_json_tags": true,
416
+ "json_tag_omitempty": true,
417
+ "struct_case": "pascal",
418
+ "field_case": "pascal",
419
+ "language_config": {
420
+ "use_pointers_for_optional": true,
421
+ "int_type": "int64",
422
+ "float_type": "float64"
423
+ }
424
+ }
425
+ ```
426
+
427
+ ### Python Configuration Example
428
+
429
+ ```json
430
+ {
431
+ "package_name": "models",
432
+ "add_comments": true,
433
+ "struct_case": "pascal",
434
+ "field_case": "snake",
435
+ "language_config": {
436
+ "style": "pydantic",
437
+ "use_optional": true,
438
+ "pydantic_use_field": true,
439
+ "pydantic_use_alias": true,
440
+ "pydantic_config_dict": true
441
+ }
442
+ }
443
+ ```
444
+
445
+ Load configuration:
446
+
447
+ ```bash
448
+ json_explorer data.json --generate go --config config.json
449
+ json_explorer data.json --generate python --config config.json
450
+ ```
451
+
452
+ ---
453
+
454
+ ## API Reference
455
+
456
+ For the complete API reference go to [JSON Explorer API Documentation](https://ms-32154.github.io/py-json-analyzer/) or see the source code.
457
+
458
+ ---
459
+
460
+ ## License
461
+
462
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
463
+
464
+ ---
465
+
466
+ ## Contributing
467
+
468
+ Contributions are welcome! Please feel free to submit a Pull Request.
469
+
470
+ 1. Fork the repository
471
+ 2. Create your feature branch (`git checkout -b feature/AmazingFeature`)
472
+ 3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)
473
+ 4. Push to the branch (`git push origin feature/AmazingFeature`)
474
+ 5. Open a Pull Request
475
+
476
+ ---
477
+
478
+ ## Support
479
+
480
+ If you encounter any issues or have questions, please:
481
+
482
+ 1. Check the [examples](#examples) section
483
+ 2. Search existing [GitHub Issues](https://github.com/MS-32154/py-json-analyzer/issues)
484
+ 3. Create a new issue with:
485
+ - Python version
486
+ - Operating system
487
+ - Minimal code example reproducing the issue
488
+ - Full error traceback (if applicable)
489
+
490
+ ---
491
+
492
+ **JSON Explorer** – © 2025 MS-32154. All rights reserved.