<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://grasswiki.osgeo.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Nishantbansal2003</id>
	<title>GRASS-Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://grasswiki.osgeo.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Nishantbansal2003"/>
	<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/wiki/Special:Contributions/Nishantbansal2003"/>
	<updated>2026-05-22T11:04:24Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28692</id>
		<title>GRASS GSoC 2025 Add JSON output to different tools in C</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28692"/>
		<updated>2025-09-02T17:45:52Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: /* Log of Pull Requests */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Nishant Bansal&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo - Open Source Geospatial Foundation]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/NishantBansal2003/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''GSoC proposal''' || [https://docs.google.com/document/d/1ZPQ9RXU7b_RUDmBmAMeK7ZjFAV1WC7Urd1Zlz678jyw/edit?tab=t.0#heading=h.z6ne0og04bp5 View Proposal]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Abstract =&lt;br /&gt;
Currently, most GRASS tools produce data in plain text by default. This means that users who want to process the output in Python need to create custom parsing code. To make this easier, several modules could be improved by oﬀering JSON as an alternative output format. Recently, the Parson library was added to the GRASS codebase to support JSON output in addition to plain text. Building on the advancements made during the last GSoC, my project aims to expand JSON output capabilities to more tools using the Parson library. I will also work on making the JSON structure introduced in the previous GSoC more useful and consistent. Additionally, I plan to add support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
&lt;br /&gt;
# Working with mentors to finalize the structure of the JSON output.&lt;br /&gt;
# Adding an option to choose the output format (plain text or JSON) for each updated tool.&lt;br /&gt;
# Make the JSON structure introduced during the last GSoC more useful and consistent across tools.&lt;br /&gt;
# Developing Python test cases to ensure that the JSON output works correctly and to avoid future issues.&lt;br /&gt;
# Providing basic documentation and example JSON outputs for each modified tool.&lt;br /&gt;
# Adding support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
# Develop simple examples demonstrating how to use JSON output in a data science workflow, such as reading JSON data into pandas or python.&lt;br /&gt;
&lt;br /&gt;
= Timeline =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Period !! Timeline  !! Tasks   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period &lt;br /&gt;
||&lt;br /&gt;
May 8 - June 1  &lt;br /&gt;
|| &lt;br /&gt;
# Reviewed the work done during the last GSoC to stabilize the JSON output.&lt;br /&gt;
# Discussed the priority tools for adding JSON support.&lt;br /&gt;
# Read GRASS documentation to add Python and JSON examples to the documentation.&lt;br /&gt;
|| &lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;13&amp;quot; | Official Coding Period &lt;br /&gt;
|-&lt;br /&gt;
| '''Week 1''' (June 2 - June 8) || &lt;br /&gt;
# Add JSON support for g.mapset [https://github.com/OSGeo/grass/pull/5810 #5810]&lt;br /&gt;
# Fix uninitialized zone_value in r.univar [https://github.com/OSGeo/grass/pull/5821 #5821]&lt;br /&gt;
# Add JSON support for r.what.color [https://github.com/OSGeo/grass/pull/5822 #5822]&lt;br /&gt;
# Update test file in r.info [https://github.com/OSGeo/grass/pull/5842 #5842]&lt;br /&gt;
# Improve interface for r.info [https://github.com/OSGeo/grass/pull/5859 #5859]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 2''' (June 9 - June 15) ||&lt;br /&gt;
# Add JSON support for g.version [https://github.com/OSGeo/grass/pull/5863 #5863]&lt;br /&gt;
# Add JSON support for i.group [https://github.com/OSGeo/grass/pull/5870 #5870]&lt;br /&gt;
# Add test file in r.stats [https://github.com/OSGeo/grass/pull/5879 #5879]&lt;br /&gt;
# Add tests for JSON output in r.stats [https://github.com/OSGeo/grass/pull/5892 #5892]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 3''' (June 16 - June 22) ||&lt;br /&gt;
# Update the JSON output schema of v.distance [https://github.com/OSGeo/grass/pull/5898 #5898]&lt;br /&gt;
# Fix uninitialized window variable in r.stats [https://github.com/OSGeo/grass/pull/5900 #5900]&lt;br /&gt;
# Add test file in g.list [https://github.com/OSGeo/grass/pull/5906 #5906]&lt;br /&gt;
# Add JSON support for g.list [https://github.com/OSGeo/grass/pull/5921 #5921]&lt;br /&gt;
# Update the JSON output schema of g.region [https://github.com/OSGeo/grass/pull/5929 #5929]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 4''' (June 23 - June 29) ||&lt;br /&gt;
# Update the JSON output schema of v.to.db [https://github.com/OSGeo/grass/pull/5946 #5946]&lt;br /&gt;
# Update the JSON output schema of r.profile [https://github.com/OSGeo/grass/pull/5962 #5962]&lt;br /&gt;
# Add SHELL and CSV output support for r.univar [https://github.com/OSGeo/grass/pull/5966 #5966]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 5''' (June 30 - July 6) ||&lt;br /&gt;
# Add test file in r.regression.line [https://github.com/OSGeo/grass/pull/5990 #5990]&lt;br /&gt;
# Add JSON support for r.regression.line [https://github.com/OSGeo/grass/pull/5993 #5993]&lt;br /&gt;
# Add test file in r.stats.quantile [https://github.com/OSGeo/grass/pull/6002 #6002]&lt;br /&gt;
# Add JSON support for r.stats.quantile [https://github.com/OSGeo/grass/pull/6007 #6007]&lt;br /&gt;
# Add test file in r.volume [https://github.com/OSGeo/grass/pull/6027 #6027]&lt;br /&gt;
# Add JSON support for r.volume [https://github.com/OSGeo/grass/pull/6036 #6036]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 6''' (July 7 - July 13) ||&lt;br /&gt;
# Add JSON support for db.columns [https://github.com/OSGeo/grass/pull/6042 #6042]&lt;br /&gt;
# Add test file in m.measure [https://github.com/OSGeo/grass/pull/6051 #6051]&lt;br /&gt;
# Add test file in db.connect [https://github.com/OSGeo/grass/pull/6052 #6052]&lt;br /&gt;
# Add JSON support for m.measure [https://github.com/OSGeo/grass/pull/6053 #6053]&lt;br /&gt;
# Add JSON support for db.connect [https://github.com/OSGeo/grass/pull/6059 #6059]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | '''Week 7''' (July 14 - July 20) ||&lt;br /&gt;
# Add test file in r.regression.multi [https://github.com/OSGeo/grass/pull/6066 #6066]&lt;br /&gt;
# Add test file in v.db.connect [https://github.com/OSGeo/grass/pull/6067 #6067]&lt;br /&gt;
# Add JSON support for r.regression.multi [https://github.com/OSGeo/grass/pull/6075 #6075]&lt;br /&gt;
# Add JSON support for v.db.connect [https://github.com/OSGeo/grass/pull/6077 #6077]&lt;br /&gt;
# Submit MidTerm evaluation.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 8''' (July 21 - July 27) ||&lt;br /&gt;
# Add JSON support for g.findfile [https://github.com/OSGeo/grass/pull/6091 #6091]&lt;br /&gt;
# Add test file in r3.info [https://github.com/OSGeo/grass/pull/6098 #6098]&lt;br /&gt;
# Add JSON support for r3.info [https://github.com/OSGeo/grass/pull/6103 #6103]&lt;br /&gt;
# Add test file in v.what.rast [https://github.com/OSGeo/grass/pull/6109 #6109]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 9''' (July 28 - August 3) ||&lt;br /&gt;
# Update format to CSV instead of shell in v.category [https://github.com/OSGeo/grass/pull/6132 #6132]&lt;br /&gt;
# Add CSV output support to r.stats [https://github.com/OSGeo/grass/pull/6133 #6133]&lt;br /&gt;
# Add CSV headers to r.volume [https://github.com/OSGeo/grass/pull/6134 #6134]&lt;br /&gt;
# Add JSON support for v.what.rast [https://github.com/OSGeo/grass/pull/6140 #6140]&lt;br /&gt;
# Add CSV output support to r.profile [https://github.com/OSGeo/grass/pull/6145 #6145]&lt;br /&gt;
# Update test cases in r.distance [https://github.com/OSGeo/grass/pull/6150 #6150]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 10''' (August 4 - August 10) ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 11''' (August 11 - August 17) ||&lt;br /&gt;
# Add JSON and CSV support for r.distance [https://github.com/OSGeo/grass/pull/6204 #6204]&lt;br /&gt;
# Add more test cases in v.class [https://github.com/OSGeo/grass/pull/6205 #6205]&lt;br /&gt;
# Add JSON and CSV support for v.class [https://github.com/OSGeo/grass/pull/6210 #6210]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 12''' (August 18 - August 24) ||&lt;br /&gt;
# Update JSON output format for v.what [https://github.com/OSGeo/grass/pull/6252 #6252]&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Evaluation Period &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | August 25 - September 1 ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
# Submit code, final evaluation and write the final GSoC report.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Reports =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* Introduced myself on the [https://discourse.osgeo.org/t/gsoc-2025-introduction-nishant-bansal/147005 OSGeo Discourse mailing list].&lt;br /&gt;
* Created both my [https://wiki.osgeo.org/wiki/User:Nishantbansal2003 personal Wiki page] and the [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C project Wiki page], adding all necessary project-related information.&lt;br /&gt;
* Read GRASS documentation to support the addition of Python and JSON examples.&lt;br /&gt;
* Worked on the following pull requests:&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5688 #5688]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5773 #5773]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5775 #5775]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5784 #5784]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5785 #5785]&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to the g.mapset and r.what.color modules.&lt;br /&gt;
* If time permits, I will begin improving the r.info interface: [https://github.com/OSGeo/grass/issues/5793 Issue #5793]&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
'''Project Discussions and Meetings'''&lt;br /&gt;
* '''14 May 2025''': Introductory meeting discussing JSON support and overall project milestones.&lt;br /&gt;
* '''21 May 2025''': Introduction with fellow developers. Discussed priority tools, adding Python/Pandas examples, and approaches for finalizing the JSON schema for each module.&lt;br /&gt;
&lt;br /&gt;
== Week-1 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.mapset''': Added JSON output support, now you can use -p and -l flags to get JSON-formatted results.&lt;br /&gt;
* '''r.univar''': Fixed a bug causing an uninitialized zone_value.&lt;br /&gt;
* '''r.what.color''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5822 #5822])&lt;br /&gt;
* '''r.info (regression tests)''': To maintain backward compatibility while updating its interface, I added strong regression tests.&lt;br /&gt;
* '''r.info (interface improvements)''': Began improving the module’s interface. (See PR [https://github.com/OSGeo/grass/pull/5859 #5859])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.version (see issue [https://github.com/OSGeo/grass/issues/5816 #5816]).&lt;br /&gt;
* Add JSON output support to i.group (see issue [https://github.com/OSGeo/grass/issues/5815 #5815]).&lt;br /&gt;
* If time permits, write tests for r.stats (see issue [https://github.com/OSGeo/grass/issues/5814 #5814]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-2 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.version''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5863 #5863])&lt;br /&gt;
* '''i.group''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5870 #5870])&lt;br /&gt;
* '''r.stats (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats''': Added tests for JSON output; this uncovered a bug, which was fixed alongside.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.distance (see issue [https://github.com/OSGeo/grass/issues/5846 #5846]).&lt;br /&gt;
* Add JSON output support to g.list (see issue [https://github.com/OSGeo/grass/issues/5848 #5848]).&lt;br /&gt;
* If time permits, fix the JSON output format of g.region (see issue [https://github.com/OSGeo/grass/issues/5828 #5828]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-3 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.distance''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5898 #5898])&lt;br /&gt;
* '''r.stats''': Fixed a bug causing an uninitialized &amp;lt;code&amp;gt;window&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
* '''g.list (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''g.list''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5921 #5921])&lt;br /&gt;
* '''g.region''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5929 #5929])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.to.db (see issue [https://github.com/OSGeo/grass/pull/5711 #5711]).&lt;br /&gt;
* Update JSON output format and documentation of r.profile (see issue [https://github.com/OSGeo/grass/pull/5834 #5834]).&lt;br /&gt;
* If time permits, add shell and csv output formats to r.univar (see issue [https://github.com/OSGeo/grass/pull/5824 #5824]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-4 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.to.db''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5946 #5946])&lt;br /&gt;
* '''r.profile''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5962 #5962])&lt;br /&gt;
* '''r.univar''': Implemented SHELL and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/5966 #5966])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.regression.line (see issue [https://github.com/OSGeo/grass/pull/5950 #5950]).&lt;br /&gt;
* Add JSON output support to r.stats.quantile (see issue [https://github.com/OSGeo/grass/pull/5951 #5951]).&lt;br /&gt;
* Add JSON output support to r.volume (see issue [https://github.com/OSGeo/grass/pull/5949 #5949]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-5 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.line (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.line''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5993 #5993])&lt;br /&gt;
* '''r.stats.quantile (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats.quantile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6007 #6007])&lt;br /&gt;
* '''r.volume (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.volume''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6036 #6036])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to m.measure (see issue [https://github.com/OSGeo/grass/pull/6006 #6006]).&lt;br /&gt;
* Add JSON output support to db.columns (see issue [https://github.com/OSGeo/grass/pull/6008 #6008]).&lt;br /&gt;
* Add JSON output support to db.connect (see issue [https://github.com/OSGeo/grass/pull/6009 #6009]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-6 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''db.columns''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6042 #6042])&lt;br /&gt;
* '''m.measure (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''m.measure''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6053 #6053])&lt;br /&gt;
* '''db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6059 #6059])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to v.db.connect (see issue [https://github.com/OSGeo/grass/pull/6014 #6014]).&lt;br /&gt;
* Add JSON output support to r.regression.multi (see issue [https://github.com/OSGeo/grass/pull/6010 #6010]).&lt;br /&gt;
* If time permits, add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* If time permits, add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-7 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.multi (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''v.db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.multi''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6075 #6075])&lt;br /&gt;
* '''v.db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6077 #6077])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* Add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
* If time permits, add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-8 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.findfile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6091 #6091])&lt;br /&gt;
* '''r3.info (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a flag-handling bug.&lt;br /&gt;
* '''r3.info''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6103 #6103])&lt;br /&gt;
* '''v.what.rast (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a sorting bug.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
* Update format to CSV instead of shell in v.category (see issue [https://github.com/OSGeo/grass/pull/6025 #6025]).&lt;br /&gt;
* Add CSV output support to r.stats (see issue [https://github.com/OSGeo/grass/issues/5835 #5835]).&lt;br /&gt;
* If time permits, add CSV output support to r.profile (see issue [https://github.com/OSGeo/grass/issues/5958 #5958]).&lt;br /&gt;
* If time permits, add CSV headers to r.volume (see issue [https://github.com/OSGeo/grass/issues/6049 #6049]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I don’t have any blockers this week. However, I’ll be a little busy with some personal work from August 3 to August 10, so I’ll try to complete next week’s tasks this week itself.&lt;br /&gt;
&lt;br /&gt;
== Week-9 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.category''': Updated format to CSV instead of shell. (See PR [https://github.com/OSGeo/grass/pull/6132 #6132])&lt;br /&gt;
* '''r.stats''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6133 #6133])&lt;br /&gt;
* '''r.volume''': Implemented CSV column headers support. (See PR [https://github.com/OSGeo/grass/pull/6134 #6134])&lt;br /&gt;
* '''v.what.rast''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6140 #6140])&lt;br /&gt;
* '''r.profile''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6145 #6145])&lt;br /&gt;
* '''r.distance (regression tests)''': Updated regression tests to ensure backward compatibility with new JSON support. (See PR [https://github.com/OSGeo/grass/pull/6150 #6150])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* I’ll be a bit busy with some personal work from August 3 to 10, so I completed next week’s tasks last week itself. I’ve already informed my mentors about my limited availability.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* Yes, I’ll be a bit busy with some personal work from August 3 to 10.&lt;br /&gt;
&lt;br /&gt;
== Week-10 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* This week I was busy with some personal work, so I did not complete any additional tasks. However, I had already finished this week’s tasks last week. This week, I mostly focused on handling reviews for those PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.distance (see issue [https://github.com/OSGeo/grass/issues/6135 #6135]).&lt;br /&gt;
* Add JSON output support to v.class (see issue [https://github.com/OSGeo/grass/issues/6136 #6136]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-11 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.distance''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6204 #6204])&lt;br /&gt;
* '''v.class''': Updated regression tests to ensure backward compatibility with new JSON support and fixed a out-of-bounds bug. (See PR [https://github.com/OSGeo/grass/pull/6205 #6205])&lt;br /&gt;
* '''v.class''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6210 #6210])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Discuss next week’s tasks with my mentors, if no issues are assigned, I’ll identify tools that currently lack JSON support and evaluate which ones are feasible to add it to.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-12 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.what''': Updated JSON output format. (See PR [https://github.com/OSGeo/grass/pull/6252 #6252])&lt;br /&gt;
* Addressed review comments on my open PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
= Final Report =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Title''' || Add JSON output to different tools in C for GRASS&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo (Open Source Geospatial Foundation)]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''Program''' || Google Summer of Code 2025&lt;br /&gt;
|-&lt;br /&gt;
| '''Contributions''' || [https://github.com/OSGeo/grass/pulls?q=is%3Apr+author%3ANishantBansal2003+ Pull Requests]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
During my GSoC project, I addressed the challenge that most GRASS tools produced only plain text output, forcing users to write custom parsing code for Python-based workflows. The task was to make these tools more data-science friendly by adding structured output formats. To achieve this, I extended the use of the Parson library to implement consistent JSON output across multiple modules, refined the JSON structure introduced in the previous GSoC, and added optional support for SHELL and CSV outputs where appropriate. I developed comprehensive Python test cases, ensured backward compatibility, and provided documentation with practical examples such as loading JSON into pandas. As a result, GRASS users can now directly consume structured outputs in modern workflows, reducing parsing overhead, improving interoperability, and paving the way for broader adoption of GRASS in data science contexts.&lt;br /&gt;
&lt;br /&gt;
== The state of integration BEFORE the start of GSoC ==&lt;br /&gt;
Before the start of GSoC, the integration of GRASS with data science workflows was limited due to several challenges. The JSON outputs introduced in the previous GSoC contained deeply nested hierarchies, making them difficult to use directly with libraries such as '''pandas''' or in broader data science pipelines. While some tools already supported JSON (e.g., &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;), many important and highly demanded modules lacked JSON support, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt; and many more. This lack of consistency limited the seamless adoption of GRASS in analytics and machine learning contexts. Moreover, there was no clear '''documentation of the JSON schema''' or guidance on how to parse and utilize these outputs effectively in '''python or pandas''', which made it difficult for users to understand the use cases and integrate GRASS outputs into modern data science workflows.&lt;br /&gt;
&lt;br /&gt;
== The state of integration AFTER GSoC ==&lt;br /&gt;
&lt;br /&gt;
After GSoC, the integration state of JSON and alternative output formats in GRASS has significantly improved. I refactored the JSON structures for tools such as &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;, and others, removing unnecessary nesting introduced during the previous GSoC. This makes their outputs much easier to consume directly in &amp;lt;b&amp;gt;Python&amp;lt;/b&amp;gt; or with &amp;lt;b&amp;gt;pandas&amp;lt;/b&amp;gt;. In addition, JSON support has been extended to many essential and frequently used modules, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;, and many more. I also added detailed documentation of the JSON schema and provided examples showing how to parse and use these outputs effectively with Python and pandas. Together, these improvements make the adoption of GRASS in modern &amp;lt;b&amp;gt;data science workflows&amp;lt;/b&amp;gt; far more seamless and accessible.&lt;br /&gt;
&lt;br /&gt;
=== Enhancements made per tool ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;: Simplified JSON structure for univariate statistics, removed unnecessary hierarchy, and added new output format options (CSV, shell).&lt;br /&gt;
* &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;: Added JSON support for querying raster map colors, with a Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;: Added JSON support for reporting the current mapset, with a Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;: Updated JSON structure for raster map metadata, removing hierarchy for easier parsing. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;: Simplified JSON output for geographic region boundaries, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;: Added JSON support for GRASS version information, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;: Added JSON support for listing imagery groups, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;: Added JSON and CSV support for raster area statistics, with Python and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;: Refined JSON schema for nearest element queries, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;: Added JSON support for listing GRASS database files, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;: Updated JSON schema for printing vector attribute values, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;: Simplified JSON output, added CSV support, and included a matplotlib example for profile visualization.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;: Updated JSON schema for linear regression between rasters, with Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;: Updated JSON schema for category quantiles, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;: Added JSON support for raster volume calculations, fixed missing headers in CSV output, and provided pandas examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.columns&amp;lt;/code&amp;gt;: Added JSON output for listing database table columns, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;: Added JSON output for measuring lengths and areas, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.connect&amp;lt;/code&amp;gt;: Added JSON output for DB connection info, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.multi&amp;lt;/code&amp;gt;: Added JSON output for multiple regression between rasters, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.db.connect&amp;lt;/code&amp;gt;: Added JSON output for vector map attribute connections, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.findfile&amp;lt;/code&amp;gt;: Added JSON output for GRASS database file search, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;: Added JSON output for 3D raster map info, with Python example. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;: Added JSON output for extracting raster values at vector points, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt;: Added JSON and CSV support for locating closest points between raster objects, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;: Added JSON and CSV support for attribute data, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;: Migrated from manually written JSON to Parson-based JSON output, simplified schema, and provided Python parsing examples.&lt;br /&gt;
&lt;br /&gt;
All these changes were accompanied by regression tests to ensure that new JSON/CSV/SHELL/PLAIN output options do not break existing functionality. Additionally, I introduced comprehensive Python test cases for these outputs, making the enhancements reliable and future-proof. During this work, I also fixed several bugs in modules such as &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;, strengthening the stability of GRASS as a whole.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
To sum up, I’m glad to have met the three core objectives of my project with the constant support of my mentors:&lt;br /&gt;
&lt;br /&gt;
* Brought JSON output to several important and long-requested modules, added regression tests, and ensured reliable future test coverage.&lt;br /&gt;
* Enhanced the JSON schema introduced in last year’s GSoC by reducing unnecessary hierarchy, making it more consistent across tools, and providing Python/Pandas examples for practical use.&lt;br /&gt;
* Expanded &amp;lt;b&amp;gt;CSV&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;SHELL&amp;lt;/b&amp;gt; output formats to additional tools where they could bring value.&lt;br /&gt;
&lt;br /&gt;
This journey has been both rewarding and educational, and I’m grateful for the opportunity to contribute to GRASS through GSoC 2025. I especially want to thank &amp;lt;b&amp;gt;Anna Petrasova&amp;lt;/b&amp;gt; and the GRASS Development Team for their guidance and support. I’m excited to keep building on this work and further extend JSON and other features in the future.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
There is significant scope to extend structured output support across GRASS tools. In particular, future efforts should focus on:&lt;br /&gt;
* Expanding JSON output to additional modules, with details tracked here: [https://github.com/orgs/OSGeo/projects/10 GRASS JSON Outputs Project].&lt;br /&gt;
* Refining and standardizing the JSON schema to better support complex workflows and integrations.&lt;br /&gt;
* Exploring and implementing other output formats (e.g., SHELL, CSV, PLAIN) where they can improve usability and automation.&lt;br /&gt;
I also plan to continue contributing to GRASS by extending JSON support to more modules and engaging in community discussions around schema design and format integration.&lt;br /&gt;
&lt;br /&gt;
== Log of Pull Requests ==&lt;br /&gt;
Below is a list of pull requests submitted to the GRASS repository during GSoC 2025:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pull Request !! Description  !! Date   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5688 #5688] || r.univar: Fix JSON structure || May 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5773 #5773] || r.what.color: Add test file || May 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5775 #5775] || g.mapset: Add test file || May 26, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5784 #5784] || r.info: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;Closed&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5785 #5785] || g.region: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5810 #5810] || g.mapset: Add JSON support || June 2, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5821 #5821] || r.univar: Fix uninitialized zone_value || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5822 #5822] || r.what.color: Add JSON support || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5842 #5842] || r.info: Update test file || June 5, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5859 #5859] || r.info: Improve interface || June 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5863 #5863] || g.version: Add JSON support || June 9, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5870 #5870] || i.group: Add JSON support || June 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5879 #5879] || r.stats: Add test file || June 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5892 #5892] || r.stats: Add tests for JSON output || June 14, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5898 #5898] || v.distance: Update JSON format || June 16, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5900 #5900] || r.stats: fix uninitialised window value || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5906 #5906] || g.list: Add test file || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5921 #5921] || g.list: Add JSON support || June 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5929 #5929] || g.region: Update JSON format || June 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5946 #5946] || v.to.db: Update JSON format || June 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5962 #5962] || r.profile: Update JSON format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5966 #5966] || r.univar: Add shell and CSV format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5990 #5990] || r.regression.line: Add test file || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5993 #5993] || r.regression.line: Add JSON support || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6002 #6002] || r.stats.quantile: Add test file || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6007 #6007] || r.stats.quantile: Add JSON support || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6027 #6027] || r.volume: Add test file || July 4, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6036 #6036] || r.volume: Add JSON support || July 6, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6042 #6042] || db.columns: Add JSON support || July 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6051 #6051] || m.measure: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6052 #6052] || db.connect: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6053 #6053] || m.measure: Add JSON support || July 11, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6059 #6059] || db.connect: Add JSON support || July 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6066 #6066] || r.regression.multi: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6067 #6067] || v.db.connect: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6075 #6075] || r.regression.multi: Add JSON support || July 18, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6077 #6077] || v.db.connect: Add JSON support || July 19, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6091 #6091] || g.findfile: Add JSON support || July 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6098 #6098] || r3.info: Add test file || July 22, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6103 #6103] || r3.info: Add JSON support || July 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6109 #6109] || v.what.rast: Add test file || July 24, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6132 #6132] || v.category: Use CSV format instead of shell format || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6133 #6133] || r.stats: add CSV support || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6134 #6134] || r.volume: add csv column headers || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6140 #6140] || v.what.rast: Add JSON support || July 29, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6145 #6145] || r.profile: Add CSV support || July 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6150 #6150] || r.distance: Update existing test cases || August 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6204 #6204] || r.distance: Add JSON and CSV support || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6205 #6205] || v.class: Add more test cases and fix out-of-bounds bug || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6210 #6210] || v.class: Add JSON and CSV support || August 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6252 #6252] || v.what: Update JSON output format || August 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Additional Links ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Ttile&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| Project Wiki Page&lt;br /&gt;
| [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C Add JSON output to different tools in C for GRASS]&lt;br /&gt;
|-&lt;br /&gt;
| Github Fork&lt;br /&gt;
| [https://github.com/NishantBansal2003/grass GitHub Fork]&lt;br /&gt;
|-&lt;br /&gt;
| GSoC Page&lt;br /&gt;
| [https://summerofcode.withgoogle.com/programs/2025/projects/GPVGd3DH Link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples &amp;amp; Images ==&lt;br /&gt;
Below is a list of some of the tasks I completed during my GSoC. Please note that this is not a complete list. For more details on these and other tools, please check out the GRASS documentation from the PR links provided above.&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; JSON output in Python ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; can be directly loaded into a pandas DataFrame and used for plotting with matplotlib.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
# Run r.profile command&lt;br /&gt;
elevation = gs.read_command(&lt;br /&gt;
    &amp;quot;r.profile&amp;quot;,&lt;br /&gt;
    input=&amp;quot;elevation&amp;quot;,&lt;br /&gt;
    coordinates=&amp;quot;641712,226095,641546,224138,641546,222048,641049,221186&amp;quot;,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
    flags=&amp;quot;gc&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Load the JSON data into a dataframe&lt;br /&gt;
df = pd.read_json(elevation)&lt;br /&gt;
print(df)&lt;br /&gt;
&lt;br /&gt;
# Create the scatter plot&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
plt.scatter(df[&amp;quot;distance&amp;quot;], df[&amp;quot;value&amp;quot;], c=df[&amp;quot;color&amp;quot;], marker=&amp;quot;o&amp;quot;)&lt;br /&gt;
plt.title(&amp;quot;Profile of Distance vs. Elevation with Color Coding&amp;quot;)&lt;br /&gt;
plt.xlabel(&amp;quot;Distance (meters)&amp;quot;)&lt;br /&gt;
plt.ylabel(&amp;quot;Elevation&amp;quot;)&lt;br /&gt;
plt.grid(True)&lt;br /&gt;
plt.show()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame Output (first 10 rows) ====  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
         easting       northing   distance      value    color&lt;br /&gt;
0  641712.000000  226095.000000   0.000000  84.661507  #71FF00&lt;br /&gt;
1  641711.154826  226085.036106   9.999675  84.511765  #6FFF00&lt;br /&gt;
2  641710.309651  226075.072213  19.999349  84.241806  #6BFF00&lt;br /&gt;
3  641709.464477  226065.108319  29.999024  84.304214  #6CFF00&lt;br /&gt;
4  641708.619302  226055.144426  39.998699  84.174400  #6AFF00&lt;br /&gt;
5  641707.774128  226045.180532  49.998374  84.112534  #6AFF00&lt;br /&gt;
6  641706.928954  226035.216639  59.998048  84.011208  #68FF00&lt;br /&gt;
7  641706.083779  226025.252745  69.997723  83.834084  #66FF00&lt;br /&gt;
8  641705.238605  226015.288851  79.997398  83.870193  #67FF00&lt;br /&gt;
9  641704.393430  226005.324958  89.997073  84.194908  #6BFF00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Visualization ====  &lt;br /&gt;
&lt;br /&gt;
Matplotlib scatter plot generated from the &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; JSON output: &lt;br /&gt;
&lt;br /&gt;
[[File:R profile plot.png]]&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt; can be directly loaded into a pandas DataFrame.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.class&amp;quot;,&lt;br /&gt;
    map=&amp;quot;bridges&amp;quot;,&lt;br /&gt;
    column=&amp;quot;YEAR_BUILT&amp;quot;,&lt;br /&gt;
    algorithm=&amp;quot;std&amp;quot;,&lt;br /&gt;
    nbclasses=5,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data[&amp;quot;intervals&amp;quot;])&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output (intervals) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
          from           to  frequency&lt;br /&gt;
0  1891.000000  1938.829689        750&lt;br /&gt;
1  1938.829689  1954.722836       1841&lt;br /&gt;
2  1954.722836  1970.615983       5556&lt;br /&gt;
3  1970.615983  1986.509130       1788&lt;br /&gt;
4  1986.509130  1997.000000       1003&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame to display categories and values.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.what.rast&amp;quot;, map=&amp;quot;bridges&amp;quot;, raster=&amp;quot;elevation&amp;quot;, flags=&amp;quot;p&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    category       value&lt;br /&gt;
0       4635   86.851212&lt;br /&gt;
1       4648   87.883255&lt;br /&gt;
2       4688  103.382004&lt;br /&gt;
3       4709   67.387856&lt;br /&gt;
4       4986   90.972832&lt;br /&gt;
5       4991   86.550629&lt;br /&gt;
6       5027   84.256355&lt;br /&gt;
7       5060   79.500443&lt;br /&gt;
8       5071   78.732864&lt;br /&gt;
9       5089   85.703636&lt;br /&gt;
10      5096  115.967323&lt;br /&gt;
11      5130   81.055870&lt;br /&gt;
12      5150   92.812927&lt;br /&gt;
13      5166   88.149483&lt;br /&gt;
14      5184   76.426331&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test Suite Update ====&lt;br /&gt;
Added 6 tests to the test suite, including both regression tests and future-proof tests to ensure functionality remains reliable in future updates.&lt;br /&gt;
&lt;br /&gt;
[[File:V what rast test file.png|700px]]&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame to locate closest points.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
&lt;br /&gt;
result = gs.parse_command(&lt;br /&gt;
    &amp;quot;r.distance&amp;quot;, map=[&amp;quot;zipcodes&amp;quot;, &amp;quot;lakes&amp;quot;], flags=&amp;quot;l&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
df = pd.json_normalize(result)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output (first 10 rows, truncated) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
       distance  from_cell.category  from_cell.easting  ...  to_cell.easting to_cell.northing  to_cell.label&lt;br /&gt;
0  11158.507466               27511      632604.951740  ...    640584.676990    215499.220687       Dam/Weir&lt;br /&gt;
1   1037.271198               27511      631734.981693  ...    632314.961724    221839.026534      Lake/Pond&lt;br /&gt;
2   2276.988836               27511      630015.040913  ...    630765.015090    219459.099418      Reservoir&lt;br /&gt;
3  14614.155031               27513      631055.005106  ...    640584.676990    215499.220687       Dam/Weir&lt;br /&gt;
4   3635.876453               27513      631674.983759  ...    635164.863600    227198.862392      Lake/Pond&lt;br /&gt;
5   6971.335517               27513      630005.041257  ...    630765.015090    219459.099418      Reservoir&lt;br /&gt;
6   8978.927486               27518      632134.967922  ...    640424.682499    215209.229568       Dam/Weir&lt;br /&gt;
7      0.000000               27518      630005.041257  ...    630005.041257    220199.076757      Lake/Pond&lt;br /&gt;
8    699.975899               27518      630005.041257  ...    630705.017156    219379.101868      Reservoir&lt;br /&gt;
9    509.197766               27529      641154.657366  ...    640674.673892    215249.228343       Dam/Weir&lt;br /&gt;
&lt;br /&gt;
[10 rows x 9 columns]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.distance&amp;quot;,&lt;br /&gt;
    flags=&amp;quot;p&amp;quot;,&lt;br /&gt;
    from_=&amp;quot;busroute_a&amp;quot;,&lt;br /&gt;
    to=&amp;quot;busstopsall&amp;quot;,&lt;br /&gt;
    upload=&amp;quot;dist,to_attr&amp;quot;,&lt;br /&gt;
    to_column=&amp;quot;routes&amp;quot;,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
   from_cat  to_cat      dist to_attr&lt;br /&gt;
0         1     112  0.142812     8,A&lt;br /&gt;
1         2      44  0.102327     9,A&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;r.volume&amp;quot;, input=&amp;quot;elevation&amp;quot;, clump=&amp;quot;geology_30m&amp;quot;, flags=&amp;quot;p&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    category  average         sum   cells        volume  easting  northing&lt;br /&gt;
0        217   118.93 86288827.99  725562 8628882798.63   635325    221535&lt;br /&gt;
1        262   108.97 21650560.37  198684 2165056037.02   638935    222495&lt;br /&gt;
2        270    92.23 63578874.44  689373 6357887443.53   642405    221485&lt;br /&gt;
3        405   132.96 33732662.09  253710 3373266208.59   631835    224095&lt;br /&gt;
4        583   139.35  3011288.22   21609  301128821.55   630205    224665&lt;br /&gt;
5        720   124.30   599618.16    4824   59961816.06   634075    227995&lt;br /&gt;
6        766   132.43   936791.20    7074   93679120.08   631425    227845&lt;br /&gt;
7        862   118.31  7302317.47   61722  730231746.74   630505    218885&lt;br /&gt;
8        910    94.20  4235816.13   44964  423581613.11   639215    216365&lt;br /&gt;
9        921   135.22  1693985.23   12528  169398523.05   630755    215445&lt;br /&gt;
10       945   127.24     1145.12       9     114512.03   630015    215015&lt;br /&gt;
11       946    89.91   365748.34    4068   36574833.85   639085    215255&lt;br /&gt;
12       948   129.02   112631.82     873   11263181.57   630185    215115&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test Suite Update ====&lt;br /&gt;
&lt;br /&gt;
Added 4 tests to the test suite, including both regression tests and future-proof tests to ensure functionality remains reliable in future updates.&lt;br /&gt;
&lt;br /&gt;
[[File:Test cmd 2.png|600px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Test cmd output 2.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{GSoC}}&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28691</id>
		<title>GRASS GSoC 2025 Add JSON output to different tools in C</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28691"/>
		<updated>2025-08-30T11:13:53Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: /* Log of Pull Requests */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Nishant Bansal&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo - Open Source Geospatial Foundation]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/NishantBansal2003/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''GSoC proposal''' || [https://docs.google.com/document/d/1ZPQ9RXU7b_RUDmBmAMeK7ZjFAV1WC7Urd1Zlz678jyw/edit?tab=t.0#heading=h.z6ne0og04bp5 View Proposal]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Abstract =&lt;br /&gt;
Currently, most GRASS tools produce data in plain text by default. This means that users who want to process the output in Python need to create custom parsing code. To make this easier, several modules could be improved by oﬀering JSON as an alternative output format. Recently, the Parson library was added to the GRASS codebase to support JSON output in addition to plain text. Building on the advancements made during the last GSoC, my project aims to expand JSON output capabilities to more tools using the Parson library. I will also work on making the JSON structure introduced in the previous GSoC more useful and consistent. Additionally, I plan to add support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
&lt;br /&gt;
# Working with mentors to finalize the structure of the JSON output.&lt;br /&gt;
# Adding an option to choose the output format (plain text or JSON) for each updated tool.&lt;br /&gt;
# Make the JSON structure introduced during the last GSoC more useful and consistent across tools.&lt;br /&gt;
# Developing Python test cases to ensure that the JSON output works correctly and to avoid future issues.&lt;br /&gt;
# Providing basic documentation and example JSON outputs for each modified tool.&lt;br /&gt;
# Adding support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
# Develop simple examples demonstrating how to use JSON output in a data science workflow, such as reading JSON data into pandas or python.&lt;br /&gt;
&lt;br /&gt;
= Timeline =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Period !! Timeline  !! Tasks   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period &lt;br /&gt;
||&lt;br /&gt;
May 8 - June 1  &lt;br /&gt;
|| &lt;br /&gt;
# Reviewed the work done during the last GSoC to stabilize the JSON output.&lt;br /&gt;
# Discussed the priority tools for adding JSON support.&lt;br /&gt;
# Read GRASS documentation to add Python and JSON examples to the documentation.&lt;br /&gt;
|| &lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;13&amp;quot; | Official Coding Period &lt;br /&gt;
|-&lt;br /&gt;
| '''Week 1''' (June 2 - June 8) || &lt;br /&gt;
# Add JSON support for g.mapset [https://github.com/OSGeo/grass/pull/5810 #5810]&lt;br /&gt;
# Fix uninitialized zone_value in r.univar [https://github.com/OSGeo/grass/pull/5821 #5821]&lt;br /&gt;
# Add JSON support for r.what.color [https://github.com/OSGeo/grass/pull/5822 #5822]&lt;br /&gt;
# Update test file in r.info [https://github.com/OSGeo/grass/pull/5842 #5842]&lt;br /&gt;
# Improve interface for r.info [https://github.com/OSGeo/grass/pull/5859 #5859]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 2''' (June 9 - June 15) ||&lt;br /&gt;
# Add JSON support for g.version [https://github.com/OSGeo/grass/pull/5863 #5863]&lt;br /&gt;
# Add JSON support for i.group [https://github.com/OSGeo/grass/pull/5870 #5870]&lt;br /&gt;
# Add test file in r.stats [https://github.com/OSGeo/grass/pull/5879 #5879]&lt;br /&gt;
# Add tests for JSON output in r.stats [https://github.com/OSGeo/grass/pull/5892 #5892]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 3''' (June 16 - June 22) ||&lt;br /&gt;
# Update the JSON output schema of v.distance [https://github.com/OSGeo/grass/pull/5898 #5898]&lt;br /&gt;
# Fix uninitialized window variable in r.stats [https://github.com/OSGeo/grass/pull/5900 #5900]&lt;br /&gt;
# Add test file in g.list [https://github.com/OSGeo/grass/pull/5906 #5906]&lt;br /&gt;
# Add JSON support for g.list [https://github.com/OSGeo/grass/pull/5921 #5921]&lt;br /&gt;
# Update the JSON output schema of g.region [https://github.com/OSGeo/grass/pull/5929 #5929]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 4''' (June 23 - June 29) ||&lt;br /&gt;
# Update the JSON output schema of v.to.db [https://github.com/OSGeo/grass/pull/5946 #5946]&lt;br /&gt;
# Update the JSON output schema of r.profile [https://github.com/OSGeo/grass/pull/5962 #5962]&lt;br /&gt;
# Add SHELL and CSV output support for r.univar [https://github.com/OSGeo/grass/pull/5966 #5966]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 5''' (June 30 - July 6) ||&lt;br /&gt;
# Add test file in r.regression.line [https://github.com/OSGeo/grass/pull/5990 #5990]&lt;br /&gt;
# Add JSON support for r.regression.line [https://github.com/OSGeo/grass/pull/5993 #5993]&lt;br /&gt;
# Add test file in r.stats.quantile [https://github.com/OSGeo/grass/pull/6002 #6002]&lt;br /&gt;
# Add JSON support for r.stats.quantile [https://github.com/OSGeo/grass/pull/6007 #6007]&lt;br /&gt;
# Add test file in r.volume [https://github.com/OSGeo/grass/pull/6027 #6027]&lt;br /&gt;
# Add JSON support for r.volume [https://github.com/OSGeo/grass/pull/6036 #6036]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 6''' (July 7 - July 13) ||&lt;br /&gt;
# Add JSON support for db.columns [https://github.com/OSGeo/grass/pull/6042 #6042]&lt;br /&gt;
# Add test file in m.measure [https://github.com/OSGeo/grass/pull/6051 #6051]&lt;br /&gt;
# Add test file in db.connect [https://github.com/OSGeo/grass/pull/6052 #6052]&lt;br /&gt;
# Add JSON support for m.measure [https://github.com/OSGeo/grass/pull/6053 #6053]&lt;br /&gt;
# Add JSON support for db.connect [https://github.com/OSGeo/grass/pull/6059 #6059]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | '''Week 7''' (July 14 - July 20) ||&lt;br /&gt;
# Add test file in r.regression.multi [https://github.com/OSGeo/grass/pull/6066 #6066]&lt;br /&gt;
# Add test file in v.db.connect [https://github.com/OSGeo/grass/pull/6067 #6067]&lt;br /&gt;
# Add JSON support for r.regression.multi [https://github.com/OSGeo/grass/pull/6075 #6075]&lt;br /&gt;
# Add JSON support for v.db.connect [https://github.com/OSGeo/grass/pull/6077 #6077]&lt;br /&gt;
# Submit MidTerm evaluation.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 8''' (July 21 - July 27) ||&lt;br /&gt;
# Add JSON support for g.findfile [https://github.com/OSGeo/grass/pull/6091 #6091]&lt;br /&gt;
# Add test file in r3.info [https://github.com/OSGeo/grass/pull/6098 #6098]&lt;br /&gt;
# Add JSON support for r3.info [https://github.com/OSGeo/grass/pull/6103 #6103]&lt;br /&gt;
# Add test file in v.what.rast [https://github.com/OSGeo/grass/pull/6109 #6109]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 9''' (July 28 - August 3) ||&lt;br /&gt;
# Update format to CSV instead of shell in v.category [https://github.com/OSGeo/grass/pull/6132 #6132]&lt;br /&gt;
# Add CSV output support to r.stats [https://github.com/OSGeo/grass/pull/6133 #6133]&lt;br /&gt;
# Add CSV headers to r.volume [https://github.com/OSGeo/grass/pull/6134 #6134]&lt;br /&gt;
# Add JSON support for v.what.rast [https://github.com/OSGeo/grass/pull/6140 #6140]&lt;br /&gt;
# Add CSV output support to r.profile [https://github.com/OSGeo/grass/pull/6145 #6145]&lt;br /&gt;
# Update test cases in r.distance [https://github.com/OSGeo/grass/pull/6150 #6150]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 10''' (August 4 - August 10) ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 11''' (August 11 - August 17) ||&lt;br /&gt;
# Add JSON and CSV support for r.distance [https://github.com/OSGeo/grass/pull/6204 #6204]&lt;br /&gt;
# Add more test cases in v.class [https://github.com/OSGeo/grass/pull/6205 #6205]&lt;br /&gt;
# Add JSON and CSV support for v.class [https://github.com/OSGeo/grass/pull/6210 #6210]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 12''' (August 18 - August 24) ||&lt;br /&gt;
# Update JSON output format for v.what [https://github.com/OSGeo/grass/pull/6252 #6252]&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Evaluation Period &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | August 25 - September 1 ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
# Submit code, final evaluation and write the final GSoC report.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Reports =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* Introduced myself on the [https://discourse.osgeo.org/t/gsoc-2025-introduction-nishant-bansal/147005 OSGeo Discourse mailing list].&lt;br /&gt;
* Created both my [https://wiki.osgeo.org/wiki/User:Nishantbansal2003 personal Wiki page] and the [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C project Wiki page], adding all necessary project-related information.&lt;br /&gt;
* Read GRASS documentation to support the addition of Python and JSON examples.&lt;br /&gt;
* Worked on the following pull requests:&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5688 #5688]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5773 #5773]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5775 #5775]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5784 #5784]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5785 #5785]&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to the g.mapset and r.what.color modules.&lt;br /&gt;
* If time permits, I will begin improving the r.info interface: [https://github.com/OSGeo/grass/issues/5793 Issue #5793]&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
'''Project Discussions and Meetings'''&lt;br /&gt;
* '''14 May 2025''': Introductory meeting discussing JSON support and overall project milestones.&lt;br /&gt;
* '''21 May 2025''': Introduction with fellow developers. Discussed priority tools, adding Python/Pandas examples, and approaches for finalizing the JSON schema for each module.&lt;br /&gt;
&lt;br /&gt;
== Week-1 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.mapset''': Added JSON output support, now you can use -p and -l flags to get JSON-formatted results.&lt;br /&gt;
* '''r.univar''': Fixed a bug causing an uninitialized zone_value.&lt;br /&gt;
* '''r.what.color''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5822 #5822])&lt;br /&gt;
* '''r.info (regression tests)''': To maintain backward compatibility while updating its interface, I added strong regression tests.&lt;br /&gt;
* '''r.info (interface improvements)''': Began improving the module’s interface. (See PR [https://github.com/OSGeo/grass/pull/5859 #5859])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.version (see issue [https://github.com/OSGeo/grass/issues/5816 #5816]).&lt;br /&gt;
* Add JSON output support to i.group (see issue [https://github.com/OSGeo/grass/issues/5815 #5815]).&lt;br /&gt;
* If time permits, write tests for r.stats (see issue [https://github.com/OSGeo/grass/issues/5814 #5814]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-2 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.version''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5863 #5863])&lt;br /&gt;
* '''i.group''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5870 #5870])&lt;br /&gt;
* '''r.stats (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats''': Added tests for JSON output; this uncovered a bug, which was fixed alongside.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.distance (see issue [https://github.com/OSGeo/grass/issues/5846 #5846]).&lt;br /&gt;
* Add JSON output support to g.list (see issue [https://github.com/OSGeo/grass/issues/5848 #5848]).&lt;br /&gt;
* If time permits, fix the JSON output format of g.region (see issue [https://github.com/OSGeo/grass/issues/5828 #5828]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-3 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.distance''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5898 #5898])&lt;br /&gt;
* '''r.stats''': Fixed a bug causing an uninitialized &amp;lt;code&amp;gt;window&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
* '''g.list (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''g.list''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5921 #5921])&lt;br /&gt;
* '''g.region''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5929 #5929])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.to.db (see issue [https://github.com/OSGeo/grass/pull/5711 #5711]).&lt;br /&gt;
* Update JSON output format and documentation of r.profile (see issue [https://github.com/OSGeo/grass/pull/5834 #5834]).&lt;br /&gt;
* If time permits, add shell and csv output formats to r.univar (see issue [https://github.com/OSGeo/grass/pull/5824 #5824]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-4 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.to.db''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5946 #5946])&lt;br /&gt;
* '''r.profile''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5962 #5962])&lt;br /&gt;
* '''r.univar''': Implemented SHELL and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/5966 #5966])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.regression.line (see issue [https://github.com/OSGeo/grass/pull/5950 #5950]).&lt;br /&gt;
* Add JSON output support to r.stats.quantile (see issue [https://github.com/OSGeo/grass/pull/5951 #5951]).&lt;br /&gt;
* Add JSON output support to r.volume (see issue [https://github.com/OSGeo/grass/pull/5949 #5949]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-5 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.line (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.line''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5993 #5993])&lt;br /&gt;
* '''r.stats.quantile (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats.quantile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6007 #6007])&lt;br /&gt;
* '''r.volume (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.volume''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6036 #6036])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to m.measure (see issue [https://github.com/OSGeo/grass/pull/6006 #6006]).&lt;br /&gt;
* Add JSON output support to db.columns (see issue [https://github.com/OSGeo/grass/pull/6008 #6008]).&lt;br /&gt;
* Add JSON output support to db.connect (see issue [https://github.com/OSGeo/grass/pull/6009 #6009]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-6 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''db.columns''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6042 #6042])&lt;br /&gt;
* '''m.measure (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''m.measure''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6053 #6053])&lt;br /&gt;
* '''db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6059 #6059])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to v.db.connect (see issue [https://github.com/OSGeo/grass/pull/6014 #6014]).&lt;br /&gt;
* Add JSON output support to r.regression.multi (see issue [https://github.com/OSGeo/grass/pull/6010 #6010]).&lt;br /&gt;
* If time permits, add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* If time permits, add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-7 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.multi (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''v.db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.multi''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6075 #6075])&lt;br /&gt;
* '''v.db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6077 #6077])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* Add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
* If time permits, add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-8 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.findfile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6091 #6091])&lt;br /&gt;
* '''r3.info (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a flag-handling bug.&lt;br /&gt;
* '''r3.info''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6103 #6103])&lt;br /&gt;
* '''v.what.rast (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a sorting bug.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
* Update format to CSV instead of shell in v.category (see issue [https://github.com/OSGeo/grass/pull/6025 #6025]).&lt;br /&gt;
* Add CSV output support to r.stats (see issue [https://github.com/OSGeo/grass/issues/5835 #5835]).&lt;br /&gt;
* If time permits, add CSV output support to r.profile (see issue [https://github.com/OSGeo/grass/issues/5958 #5958]).&lt;br /&gt;
* If time permits, add CSV headers to r.volume (see issue [https://github.com/OSGeo/grass/issues/6049 #6049]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I don’t have any blockers this week. However, I’ll be a little busy with some personal work from August 3 to August 10, so I’ll try to complete next week’s tasks this week itself.&lt;br /&gt;
&lt;br /&gt;
== Week-9 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.category''': Updated format to CSV instead of shell. (See PR [https://github.com/OSGeo/grass/pull/6132 #6132])&lt;br /&gt;
* '''r.stats''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6133 #6133])&lt;br /&gt;
* '''r.volume''': Implemented CSV column headers support. (See PR [https://github.com/OSGeo/grass/pull/6134 #6134])&lt;br /&gt;
* '''v.what.rast''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6140 #6140])&lt;br /&gt;
* '''r.profile''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6145 #6145])&lt;br /&gt;
* '''r.distance (regression tests)''': Updated regression tests to ensure backward compatibility with new JSON support. (See PR [https://github.com/OSGeo/grass/pull/6150 #6150])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* I’ll be a bit busy with some personal work from August 3 to 10, so I completed next week’s tasks last week itself. I’ve already informed my mentors about my limited availability.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* Yes, I’ll be a bit busy with some personal work from August 3 to 10.&lt;br /&gt;
&lt;br /&gt;
== Week-10 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* This week I was busy with some personal work, so I did not complete any additional tasks. However, I had already finished this week’s tasks last week. This week, I mostly focused on handling reviews for those PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.distance (see issue [https://github.com/OSGeo/grass/issues/6135 #6135]).&lt;br /&gt;
* Add JSON output support to v.class (see issue [https://github.com/OSGeo/grass/issues/6136 #6136]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-11 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.distance''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6204 #6204])&lt;br /&gt;
* '''v.class''': Updated regression tests to ensure backward compatibility with new JSON support and fixed a out-of-bounds bug. (See PR [https://github.com/OSGeo/grass/pull/6205 #6205])&lt;br /&gt;
* '''v.class''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6210 #6210])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Discuss next week’s tasks with my mentors, if no issues are assigned, I’ll identify tools that currently lack JSON support and evaluate which ones are feasible to add it to.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-12 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.what''': Updated JSON output format. (See PR [https://github.com/OSGeo/grass/pull/6252 #6252])&lt;br /&gt;
* Addressed review comments on my open PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
= Final Report =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Title''' || Add JSON output to different tools in C for GRASS&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo (Open Source Geospatial Foundation)]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''Program''' || Google Summer of Code 2025&lt;br /&gt;
|-&lt;br /&gt;
| '''Contributions''' || [https://github.com/OSGeo/grass/pulls?q=is%3Apr+author%3ANishantBansal2003+ Pull Requests]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
During my GSoC project, I addressed the challenge that most GRASS tools produced only plain text output, forcing users to write custom parsing code for Python-based workflows. The task was to make these tools more data-science friendly by adding structured output formats. To achieve this, I extended the use of the Parson library to implement consistent JSON output across multiple modules, refined the JSON structure introduced in the previous GSoC, and added optional support for SHELL and CSV outputs where appropriate. I developed comprehensive Python test cases, ensured backward compatibility, and provided documentation with practical examples such as loading JSON into pandas. As a result, GRASS users can now directly consume structured outputs in modern workflows, reducing parsing overhead, improving interoperability, and paving the way for broader adoption of GRASS in data science contexts.&lt;br /&gt;
&lt;br /&gt;
== The state of integration BEFORE the start of GSoC ==&lt;br /&gt;
Before the start of GSoC, the integration of GRASS with data science workflows was limited due to several challenges. The JSON outputs introduced in the previous GSoC contained deeply nested hierarchies, making them difficult to use directly with libraries such as '''pandas''' or in broader data science pipelines. While some tools already supported JSON (e.g., &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;), many important and highly demanded modules lacked JSON support, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt; and many more. This lack of consistency limited the seamless adoption of GRASS in analytics and machine learning contexts. Moreover, there was no clear '''documentation of the JSON schema''' or guidance on how to parse and utilize these outputs effectively in '''python or pandas''', which made it difficult for users to understand the use cases and integrate GRASS outputs into modern data science workflows.&lt;br /&gt;
&lt;br /&gt;
== The state of integration AFTER GSoC ==&lt;br /&gt;
&lt;br /&gt;
After GSoC, the integration state of JSON and alternative output formats in GRASS has significantly improved. I refactored the JSON structures for tools such as &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;, and others, removing unnecessary nesting introduced during the previous GSoC. This makes their outputs much easier to consume directly in &amp;lt;b&amp;gt;Python&amp;lt;/b&amp;gt; or with &amp;lt;b&amp;gt;pandas&amp;lt;/b&amp;gt;. In addition, JSON support has been extended to many essential and frequently used modules, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;, and many more. I also added detailed documentation of the JSON schema and provided examples showing how to parse and use these outputs effectively with Python and pandas. Together, these improvements make the adoption of GRASS in modern &amp;lt;b&amp;gt;data science workflows&amp;lt;/b&amp;gt; far more seamless and accessible.&lt;br /&gt;
&lt;br /&gt;
=== Enhancements made per tool ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;: Simplified JSON structure for univariate statistics, removed unnecessary hierarchy, and added new output format options (CSV, shell).&lt;br /&gt;
* &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;: Added JSON support for querying raster map colors, with a Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;: Added JSON support for reporting the current mapset, with a Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;: Updated JSON structure for raster map metadata, removing hierarchy for easier parsing. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;: Simplified JSON output for geographic region boundaries, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;: Added JSON support for GRASS version information, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;: Added JSON support for listing imagery groups, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;: Added JSON and CSV support for raster area statistics, with Python and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;: Refined JSON schema for nearest element queries, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;: Added JSON support for listing GRASS database files, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;: Updated JSON schema for printing vector attribute values, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;: Simplified JSON output, added CSV support, and included a matplotlib example for profile visualization.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;: Updated JSON schema for linear regression between rasters, with Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;: Updated JSON schema for category quantiles, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;: Added JSON support for raster volume calculations, fixed missing headers in CSV output, and provided pandas examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.columns&amp;lt;/code&amp;gt;: Added JSON output for listing database table columns, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;: Added JSON output for measuring lengths and areas, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.connect&amp;lt;/code&amp;gt;: Added JSON output for DB connection info, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.multi&amp;lt;/code&amp;gt;: Added JSON output for multiple regression between rasters, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.db.connect&amp;lt;/code&amp;gt;: Added JSON output for vector map attribute connections, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.findfile&amp;lt;/code&amp;gt;: Added JSON output for GRASS database file search, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;: Added JSON output for 3D raster map info, with Python example. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;: Added JSON output for extracting raster values at vector points, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt;: Added JSON and CSV support for locating closest points between raster objects, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;: Added JSON and CSV support for attribute data, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;: Migrated from manually written JSON to Parson-based JSON output, simplified schema, and provided Python parsing examples.&lt;br /&gt;
&lt;br /&gt;
All these changes were accompanied by regression tests to ensure that new JSON/CSV/SHELL/PLAIN output options do not break existing functionality. Additionally, I introduced comprehensive Python test cases for these outputs, making the enhancements reliable and future-proof. During this work, I also fixed several bugs in modules such as &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;, strengthening the stability of GRASS as a whole.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
To sum up, I’m glad to have met the three core objectives of my project with the constant support of my mentors:&lt;br /&gt;
&lt;br /&gt;
* Brought JSON output to several important and long-requested modules, added regression tests, and ensured reliable future test coverage.&lt;br /&gt;
* Enhanced the JSON schema introduced in last year’s GSoC by reducing unnecessary hierarchy, making it more consistent across tools, and providing Python/Pandas examples for practical use.&lt;br /&gt;
* Expanded &amp;lt;b&amp;gt;CSV&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;SHELL&amp;lt;/b&amp;gt; output formats to additional tools where they could bring value.&lt;br /&gt;
&lt;br /&gt;
This journey has been both rewarding and educational, and I’m grateful for the opportunity to contribute to GRASS through GSoC 2025. I especially want to thank &amp;lt;b&amp;gt;Anna Petrasova&amp;lt;/b&amp;gt; and the GRASS Development Team for their guidance and support. I’m excited to keep building on this work and further extend JSON and other features in the future.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
There is significant scope to extend structured output support across GRASS tools. In particular, future efforts should focus on:&lt;br /&gt;
* Expanding JSON output to additional modules, with details tracked here: [https://github.com/orgs/OSGeo/projects/10 GRASS JSON Outputs Project].&lt;br /&gt;
* Refining and standardizing the JSON schema to better support complex workflows and integrations.&lt;br /&gt;
* Exploring and implementing other output formats (e.g., SHELL, CSV, PLAIN) where they can improve usability and automation.&lt;br /&gt;
I also plan to continue contributing to GRASS by extending JSON support to more modules and engaging in community discussions around schema design and format integration.&lt;br /&gt;
&lt;br /&gt;
== Log of Pull Requests ==&lt;br /&gt;
Below is a list of pull requests submitted to the GRASS repository during GSoC 2025:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pull Request !! Description  !! Date   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5688 #5688] || r.univar: Fix JSON structure || May 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5773 #5773] || r.what.color: Add test file || May 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5775 #5775] || g.mapset: Add test file || May 26, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5784 #5784] || r.info: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;Closed&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5785 #5785] || g.region: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5810 #5810] || g.mapset: Add JSON support || June 2, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5821 #5821] || r.univar: Fix uninitialized zone_value || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5822 #5822] || r.what.color: Add JSON support || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5842 #5842] || r.info: Update test file || June 5, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5859 #5859] || r.info: Improve interface || June 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5863 #5863] || g.version: Add JSON support || June 9, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5870 #5870] || i.group: Add JSON support || June 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5879 #5879] || r.stats: Add test file || June 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5892 #5892] || r.stats: Add tests for JSON output || June 14, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5898 #5898] || v.distance: Update JSON format || June 16, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5900 #5900] || r.stats: fix uninitialised window value || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5906 #5906] || g.list: Add test file || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5921 #5921] || g.list: Add JSON support || June 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5929 #5929] || g.region: Update JSON format || June 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5946 #5946] || v.to.db: Update JSON format || June 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5962 #5962] || r.profile: Update JSON format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5966 #5966] || r.univar: Add shell and CSV format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5990 #5990] || r.regression.line: Add test file || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5993 #5993] || r.regression.line: Add JSON support || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6002 #6002] || r.stats.quantile: Add test file || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6007 #6007] || r.stats.quantile: Add JSON support || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6027 #6027] || r.volume: Add test file || July 4, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6036 #6036] || r.volume: Add JSON support || July 6, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6042 #6042] || db.columns: Add JSON support || July 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6051 #6051] || m.measure: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6052 #6052] || db.connect: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6053 #6053] || m.measure: Add JSON support || July 11, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6059 #6059] || db.connect: Add JSON support || July 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6066 #6066] || r.regression.multi: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6067 #6067] || v.db.connect: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6075 #6075] || r.regression.multi: Add JSON support || July 18, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6077 #6077] || v.db.connect: Add JSON support || July 19, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6091 #6091] || g.findfile: Add JSON support || July 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6098 #6098] || r3.info: Add test file || July 22, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6103 #6103] || r3.info: Add JSON support || July 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6109 #6109] || v.what.rast: Add test file || July 24, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6132 #6132] || v.category: Use CSV format instead of shell format || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6133 #6133] || r.stats: add CSV support || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6134 #6134] || r.volume: add csv column headers || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6140 #6140] || v.what.rast: Add JSON support || July 29, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6145 #6145] || r.profile: Add CSV support || July 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6150 #6150] || r.distance: Update existing test cases || August 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6204 #6204] || r.distance: Add JSON and CSV support || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6205 #6205] || v.class: Add more test cases and fix out-of-bounds bug || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6210 #6210] || v.class: Add JSON and CSV support || August 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6252 #6252] || v.what: Update JSON output format || August 23, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Additional Links ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Ttile&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| Project Wiki Page&lt;br /&gt;
| [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C Add JSON output to different tools in C for GRASS]&lt;br /&gt;
|-&lt;br /&gt;
| Github Fork&lt;br /&gt;
| [https://github.com/NishantBansal2003/grass GitHub Fork]&lt;br /&gt;
|-&lt;br /&gt;
| GSoC Page&lt;br /&gt;
| [https://summerofcode.withgoogle.com/programs/2025/projects/GPVGd3DH Link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples &amp;amp; Images ==&lt;br /&gt;
Below is a list of some of the tasks I completed during my GSoC. Please note that this is not a complete list. For more details on these and other tools, please check out the GRASS documentation from the PR links provided above.&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; JSON output in Python ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; can be directly loaded into a pandas DataFrame and used for plotting with matplotlib.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
# Run r.profile command&lt;br /&gt;
elevation = gs.read_command(&lt;br /&gt;
    &amp;quot;r.profile&amp;quot;,&lt;br /&gt;
    input=&amp;quot;elevation&amp;quot;,&lt;br /&gt;
    coordinates=&amp;quot;641712,226095,641546,224138,641546,222048,641049,221186&amp;quot;,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
    flags=&amp;quot;gc&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Load the JSON data into a dataframe&lt;br /&gt;
df = pd.read_json(elevation)&lt;br /&gt;
print(df)&lt;br /&gt;
&lt;br /&gt;
# Create the scatter plot&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
plt.scatter(df[&amp;quot;distance&amp;quot;], df[&amp;quot;value&amp;quot;], c=df[&amp;quot;color&amp;quot;], marker=&amp;quot;o&amp;quot;)&lt;br /&gt;
plt.title(&amp;quot;Profile of Distance vs. Elevation with Color Coding&amp;quot;)&lt;br /&gt;
plt.xlabel(&amp;quot;Distance (meters)&amp;quot;)&lt;br /&gt;
plt.ylabel(&amp;quot;Elevation&amp;quot;)&lt;br /&gt;
plt.grid(True)&lt;br /&gt;
plt.show()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame Output (first 10 rows) ====  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
         easting       northing   distance      value    color&lt;br /&gt;
0  641712.000000  226095.000000   0.000000  84.661507  #71FF00&lt;br /&gt;
1  641711.154826  226085.036106   9.999675  84.511765  #6FFF00&lt;br /&gt;
2  641710.309651  226075.072213  19.999349  84.241806  #6BFF00&lt;br /&gt;
3  641709.464477  226065.108319  29.999024  84.304214  #6CFF00&lt;br /&gt;
4  641708.619302  226055.144426  39.998699  84.174400  #6AFF00&lt;br /&gt;
5  641707.774128  226045.180532  49.998374  84.112534  #6AFF00&lt;br /&gt;
6  641706.928954  226035.216639  59.998048  84.011208  #68FF00&lt;br /&gt;
7  641706.083779  226025.252745  69.997723  83.834084  #66FF00&lt;br /&gt;
8  641705.238605  226015.288851  79.997398  83.870193  #67FF00&lt;br /&gt;
9  641704.393430  226005.324958  89.997073  84.194908  #6BFF00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Visualization ====  &lt;br /&gt;
&lt;br /&gt;
Matplotlib scatter plot generated from the &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; JSON output: &lt;br /&gt;
&lt;br /&gt;
[[File:R profile plot.png]]&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt; can be directly loaded into a pandas DataFrame.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.class&amp;quot;,&lt;br /&gt;
    map=&amp;quot;bridges&amp;quot;,&lt;br /&gt;
    column=&amp;quot;YEAR_BUILT&amp;quot;,&lt;br /&gt;
    algorithm=&amp;quot;std&amp;quot;,&lt;br /&gt;
    nbclasses=5,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data[&amp;quot;intervals&amp;quot;])&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output (intervals) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
          from           to  frequency&lt;br /&gt;
0  1891.000000  1938.829689        750&lt;br /&gt;
1  1938.829689  1954.722836       1841&lt;br /&gt;
2  1954.722836  1970.615983       5556&lt;br /&gt;
3  1970.615983  1986.509130       1788&lt;br /&gt;
4  1986.509130  1997.000000       1003&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame to display categories and values.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.what.rast&amp;quot;, map=&amp;quot;bridges&amp;quot;, raster=&amp;quot;elevation&amp;quot;, flags=&amp;quot;p&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    category       value&lt;br /&gt;
0       4635   86.851212&lt;br /&gt;
1       4648   87.883255&lt;br /&gt;
2       4688  103.382004&lt;br /&gt;
3       4709   67.387856&lt;br /&gt;
4       4986   90.972832&lt;br /&gt;
5       4991   86.550629&lt;br /&gt;
6       5027   84.256355&lt;br /&gt;
7       5060   79.500443&lt;br /&gt;
8       5071   78.732864&lt;br /&gt;
9       5089   85.703636&lt;br /&gt;
10      5096  115.967323&lt;br /&gt;
11      5130   81.055870&lt;br /&gt;
12      5150   92.812927&lt;br /&gt;
13      5166   88.149483&lt;br /&gt;
14      5184   76.426331&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test Suite Update ====&lt;br /&gt;
Added 6 tests to the test suite, including both regression tests and future-proof tests to ensure functionality remains reliable in future updates.&lt;br /&gt;
&lt;br /&gt;
[[File:V what rast test file.png|700px]]&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame to locate closest points.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
&lt;br /&gt;
result = gs.parse_command(&lt;br /&gt;
    &amp;quot;r.distance&amp;quot;, map=[&amp;quot;zipcodes&amp;quot;, &amp;quot;lakes&amp;quot;], flags=&amp;quot;l&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
df = pd.json_normalize(result)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output (first 10 rows, truncated) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
       distance  from_cell.category  from_cell.easting  ...  to_cell.easting to_cell.northing  to_cell.label&lt;br /&gt;
0  11158.507466               27511      632604.951740  ...    640584.676990    215499.220687       Dam/Weir&lt;br /&gt;
1   1037.271198               27511      631734.981693  ...    632314.961724    221839.026534      Lake/Pond&lt;br /&gt;
2   2276.988836               27511      630015.040913  ...    630765.015090    219459.099418      Reservoir&lt;br /&gt;
3  14614.155031               27513      631055.005106  ...    640584.676990    215499.220687       Dam/Weir&lt;br /&gt;
4   3635.876453               27513      631674.983759  ...    635164.863600    227198.862392      Lake/Pond&lt;br /&gt;
5   6971.335517               27513      630005.041257  ...    630765.015090    219459.099418      Reservoir&lt;br /&gt;
6   8978.927486               27518      632134.967922  ...    640424.682499    215209.229568       Dam/Weir&lt;br /&gt;
7      0.000000               27518      630005.041257  ...    630005.041257    220199.076757      Lake/Pond&lt;br /&gt;
8    699.975899               27518      630005.041257  ...    630705.017156    219379.101868      Reservoir&lt;br /&gt;
9    509.197766               27529      641154.657366  ...    640674.673892    215249.228343       Dam/Weir&lt;br /&gt;
&lt;br /&gt;
[10 rows x 9 columns]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.distance&amp;quot;,&lt;br /&gt;
    flags=&amp;quot;p&amp;quot;,&lt;br /&gt;
    from_=&amp;quot;busroute_a&amp;quot;,&lt;br /&gt;
    to=&amp;quot;busstopsall&amp;quot;,&lt;br /&gt;
    upload=&amp;quot;dist,to_attr&amp;quot;,&lt;br /&gt;
    to_column=&amp;quot;routes&amp;quot;,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
   from_cat  to_cat      dist to_attr&lt;br /&gt;
0         1     112  0.142812     8,A&lt;br /&gt;
1         2      44  0.102327     9,A&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;r.volume&amp;quot;, input=&amp;quot;elevation&amp;quot;, clump=&amp;quot;geology_30m&amp;quot;, flags=&amp;quot;p&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    category  average         sum   cells        volume  easting  northing&lt;br /&gt;
0        217   118.93 86288827.99  725562 8628882798.63   635325    221535&lt;br /&gt;
1        262   108.97 21650560.37  198684 2165056037.02   638935    222495&lt;br /&gt;
2        270    92.23 63578874.44  689373 6357887443.53   642405    221485&lt;br /&gt;
3        405   132.96 33732662.09  253710 3373266208.59   631835    224095&lt;br /&gt;
4        583   139.35  3011288.22   21609  301128821.55   630205    224665&lt;br /&gt;
5        720   124.30   599618.16    4824   59961816.06   634075    227995&lt;br /&gt;
6        766   132.43   936791.20    7074   93679120.08   631425    227845&lt;br /&gt;
7        862   118.31  7302317.47   61722  730231746.74   630505    218885&lt;br /&gt;
8        910    94.20  4235816.13   44964  423581613.11   639215    216365&lt;br /&gt;
9        921   135.22  1693985.23   12528  169398523.05   630755    215445&lt;br /&gt;
10       945   127.24     1145.12       9     114512.03   630015    215015&lt;br /&gt;
11       946    89.91   365748.34    4068   36574833.85   639085    215255&lt;br /&gt;
12       948   129.02   112631.82     873   11263181.57   630185    215115&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test Suite Update ====&lt;br /&gt;
&lt;br /&gt;
Added 4 tests to the test suite, including both regression tests and future-proof tests to ensure functionality remains reliable in future updates.&lt;br /&gt;
&lt;br /&gt;
[[File:Test cmd 2.png|600px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Test cmd output 2.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{GSoC}}&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28690</id>
		<title>GRASS GSoC 2025 Add JSON output to different tools in C</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28690"/>
		<updated>2025-08-30T11:08:40Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: /* Additional Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Nishant Bansal&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo - Open Source Geospatial Foundation]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/NishantBansal2003/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''GSoC proposal''' || [https://docs.google.com/document/d/1ZPQ9RXU7b_RUDmBmAMeK7ZjFAV1WC7Urd1Zlz678jyw/edit?tab=t.0#heading=h.z6ne0og04bp5 View Proposal]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Abstract =&lt;br /&gt;
Currently, most GRASS tools produce data in plain text by default. This means that users who want to process the output in Python need to create custom parsing code. To make this easier, several modules could be improved by oﬀering JSON as an alternative output format. Recently, the Parson library was added to the GRASS codebase to support JSON output in addition to plain text. Building on the advancements made during the last GSoC, my project aims to expand JSON output capabilities to more tools using the Parson library. I will also work on making the JSON structure introduced in the previous GSoC more useful and consistent. Additionally, I plan to add support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
&lt;br /&gt;
# Working with mentors to finalize the structure of the JSON output.&lt;br /&gt;
# Adding an option to choose the output format (plain text or JSON) for each updated tool.&lt;br /&gt;
# Make the JSON structure introduced during the last GSoC more useful and consistent across tools.&lt;br /&gt;
# Developing Python test cases to ensure that the JSON output works correctly and to avoid future issues.&lt;br /&gt;
# Providing basic documentation and example JSON outputs for each modified tool.&lt;br /&gt;
# Adding support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
# Develop simple examples demonstrating how to use JSON output in a data science workflow, such as reading JSON data into pandas or python.&lt;br /&gt;
&lt;br /&gt;
= Timeline =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Period !! Timeline  !! Tasks   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period &lt;br /&gt;
||&lt;br /&gt;
May 8 - June 1  &lt;br /&gt;
|| &lt;br /&gt;
# Reviewed the work done during the last GSoC to stabilize the JSON output.&lt;br /&gt;
# Discussed the priority tools for adding JSON support.&lt;br /&gt;
# Read GRASS documentation to add Python and JSON examples to the documentation.&lt;br /&gt;
|| &lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;13&amp;quot; | Official Coding Period &lt;br /&gt;
|-&lt;br /&gt;
| '''Week 1''' (June 2 - June 8) || &lt;br /&gt;
# Add JSON support for g.mapset [https://github.com/OSGeo/grass/pull/5810 #5810]&lt;br /&gt;
# Fix uninitialized zone_value in r.univar [https://github.com/OSGeo/grass/pull/5821 #5821]&lt;br /&gt;
# Add JSON support for r.what.color [https://github.com/OSGeo/grass/pull/5822 #5822]&lt;br /&gt;
# Update test file in r.info [https://github.com/OSGeo/grass/pull/5842 #5842]&lt;br /&gt;
# Improve interface for r.info [https://github.com/OSGeo/grass/pull/5859 #5859]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 2''' (June 9 - June 15) ||&lt;br /&gt;
# Add JSON support for g.version [https://github.com/OSGeo/grass/pull/5863 #5863]&lt;br /&gt;
# Add JSON support for i.group [https://github.com/OSGeo/grass/pull/5870 #5870]&lt;br /&gt;
# Add test file in r.stats [https://github.com/OSGeo/grass/pull/5879 #5879]&lt;br /&gt;
# Add tests for JSON output in r.stats [https://github.com/OSGeo/grass/pull/5892 #5892]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 3''' (June 16 - June 22) ||&lt;br /&gt;
# Update the JSON output schema of v.distance [https://github.com/OSGeo/grass/pull/5898 #5898]&lt;br /&gt;
# Fix uninitialized window variable in r.stats [https://github.com/OSGeo/grass/pull/5900 #5900]&lt;br /&gt;
# Add test file in g.list [https://github.com/OSGeo/grass/pull/5906 #5906]&lt;br /&gt;
# Add JSON support for g.list [https://github.com/OSGeo/grass/pull/5921 #5921]&lt;br /&gt;
# Update the JSON output schema of g.region [https://github.com/OSGeo/grass/pull/5929 #5929]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 4''' (June 23 - June 29) ||&lt;br /&gt;
# Update the JSON output schema of v.to.db [https://github.com/OSGeo/grass/pull/5946 #5946]&lt;br /&gt;
# Update the JSON output schema of r.profile [https://github.com/OSGeo/grass/pull/5962 #5962]&lt;br /&gt;
# Add SHELL and CSV output support for r.univar [https://github.com/OSGeo/grass/pull/5966 #5966]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 5''' (June 30 - July 6) ||&lt;br /&gt;
# Add test file in r.regression.line [https://github.com/OSGeo/grass/pull/5990 #5990]&lt;br /&gt;
# Add JSON support for r.regression.line [https://github.com/OSGeo/grass/pull/5993 #5993]&lt;br /&gt;
# Add test file in r.stats.quantile [https://github.com/OSGeo/grass/pull/6002 #6002]&lt;br /&gt;
# Add JSON support for r.stats.quantile [https://github.com/OSGeo/grass/pull/6007 #6007]&lt;br /&gt;
# Add test file in r.volume [https://github.com/OSGeo/grass/pull/6027 #6027]&lt;br /&gt;
# Add JSON support for r.volume [https://github.com/OSGeo/grass/pull/6036 #6036]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 6''' (July 7 - July 13) ||&lt;br /&gt;
# Add JSON support for db.columns [https://github.com/OSGeo/grass/pull/6042 #6042]&lt;br /&gt;
# Add test file in m.measure [https://github.com/OSGeo/grass/pull/6051 #6051]&lt;br /&gt;
# Add test file in db.connect [https://github.com/OSGeo/grass/pull/6052 #6052]&lt;br /&gt;
# Add JSON support for m.measure [https://github.com/OSGeo/grass/pull/6053 #6053]&lt;br /&gt;
# Add JSON support for db.connect [https://github.com/OSGeo/grass/pull/6059 #6059]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | '''Week 7''' (July 14 - July 20) ||&lt;br /&gt;
# Add test file in r.regression.multi [https://github.com/OSGeo/grass/pull/6066 #6066]&lt;br /&gt;
# Add test file in v.db.connect [https://github.com/OSGeo/grass/pull/6067 #6067]&lt;br /&gt;
# Add JSON support for r.regression.multi [https://github.com/OSGeo/grass/pull/6075 #6075]&lt;br /&gt;
# Add JSON support for v.db.connect [https://github.com/OSGeo/grass/pull/6077 #6077]&lt;br /&gt;
# Submit MidTerm evaluation.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 8''' (July 21 - July 27) ||&lt;br /&gt;
# Add JSON support for g.findfile [https://github.com/OSGeo/grass/pull/6091 #6091]&lt;br /&gt;
# Add test file in r3.info [https://github.com/OSGeo/grass/pull/6098 #6098]&lt;br /&gt;
# Add JSON support for r3.info [https://github.com/OSGeo/grass/pull/6103 #6103]&lt;br /&gt;
# Add test file in v.what.rast [https://github.com/OSGeo/grass/pull/6109 #6109]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 9''' (July 28 - August 3) ||&lt;br /&gt;
# Update format to CSV instead of shell in v.category [https://github.com/OSGeo/grass/pull/6132 #6132]&lt;br /&gt;
# Add CSV output support to r.stats [https://github.com/OSGeo/grass/pull/6133 #6133]&lt;br /&gt;
# Add CSV headers to r.volume [https://github.com/OSGeo/grass/pull/6134 #6134]&lt;br /&gt;
# Add JSON support for v.what.rast [https://github.com/OSGeo/grass/pull/6140 #6140]&lt;br /&gt;
# Add CSV output support to r.profile [https://github.com/OSGeo/grass/pull/6145 #6145]&lt;br /&gt;
# Update test cases in r.distance [https://github.com/OSGeo/grass/pull/6150 #6150]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 10''' (August 4 - August 10) ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 11''' (August 11 - August 17) ||&lt;br /&gt;
# Add JSON and CSV support for r.distance [https://github.com/OSGeo/grass/pull/6204 #6204]&lt;br /&gt;
# Add more test cases in v.class [https://github.com/OSGeo/grass/pull/6205 #6205]&lt;br /&gt;
# Add JSON and CSV support for v.class [https://github.com/OSGeo/grass/pull/6210 #6210]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 12''' (August 18 - August 24) ||&lt;br /&gt;
# Update JSON output format for v.what [https://github.com/OSGeo/grass/pull/6252 #6252]&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Evaluation Period &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | August 25 - September 1 ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
# Submit code, final evaluation and write the final GSoC report.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Reports =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* Introduced myself on the [https://discourse.osgeo.org/t/gsoc-2025-introduction-nishant-bansal/147005 OSGeo Discourse mailing list].&lt;br /&gt;
* Created both my [https://wiki.osgeo.org/wiki/User:Nishantbansal2003 personal Wiki page] and the [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C project Wiki page], adding all necessary project-related information.&lt;br /&gt;
* Read GRASS documentation to support the addition of Python and JSON examples.&lt;br /&gt;
* Worked on the following pull requests:&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5688 #5688]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5773 #5773]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5775 #5775]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5784 #5784]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5785 #5785]&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to the g.mapset and r.what.color modules.&lt;br /&gt;
* If time permits, I will begin improving the r.info interface: [https://github.com/OSGeo/grass/issues/5793 Issue #5793]&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
'''Project Discussions and Meetings'''&lt;br /&gt;
* '''14 May 2025''': Introductory meeting discussing JSON support and overall project milestones.&lt;br /&gt;
* '''21 May 2025''': Introduction with fellow developers. Discussed priority tools, adding Python/Pandas examples, and approaches for finalizing the JSON schema for each module.&lt;br /&gt;
&lt;br /&gt;
== Week-1 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.mapset''': Added JSON output support, now you can use -p and -l flags to get JSON-formatted results.&lt;br /&gt;
* '''r.univar''': Fixed a bug causing an uninitialized zone_value.&lt;br /&gt;
* '''r.what.color''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5822 #5822])&lt;br /&gt;
* '''r.info (regression tests)''': To maintain backward compatibility while updating its interface, I added strong regression tests.&lt;br /&gt;
* '''r.info (interface improvements)''': Began improving the module’s interface. (See PR [https://github.com/OSGeo/grass/pull/5859 #5859])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.version (see issue [https://github.com/OSGeo/grass/issues/5816 #5816]).&lt;br /&gt;
* Add JSON output support to i.group (see issue [https://github.com/OSGeo/grass/issues/5815 #5815]).&lt;br /&gt;
* If time permits, write tests for r.stats (see issue [https://github.com/OSGeo/grass/issues/5814 #5814]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-2 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.version''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5863 #5863])&lt;br /&gt;
* '''i.group''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5870 #5870])&lt;br /&gt;
* '''r.stats (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats''': Added tests for JSON output; this uncovered a bug, which was fixed alongside.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.distance (see issue [https://github.com/OSGeo/grass/issues/5846 #5846]).&lt;br /&gt;
* Add JSON output support to g.list (see issue [https://github.com/OSGeo/grass/issues/5848 #5848]).&lt;br /&gt;
* If time permits, fix the JSON output format of g.region (see issue [https://github.com/OSGeo/grass/issues/5828 #5828]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-3 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.distance''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5898 #5898])&lt;br /&gt;
* '''r.stats''': Fixed a bug causing an uninitialized &amp;lt;code&amp;gt;window&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
* '''g.list (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''g.list''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5921 #5921])&lt;br /&gt;
* '''g.region''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5929 #5929])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.to.db (see issue [https://github.com/OSGeo/grass/pull/5711 #5711]).&lt;br /&gt;
* Update JSON output format and documentation of r.profile (see issue [https://github.com/OSGeo/grass/pull/5834 #5834]).&lt;br /&gt;
* If time permits, add shell and csv output formats to r.univar (see issue [https://github.com/OSGeo/grass/pull/5824 #5824]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-4 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.to.db''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5946 #5946])&lt;br /&gt;
* '''r.profile''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5962 #5962])&lt;br /&gt;
* '''r.univar''': Implemented SHELL and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/5966 #5966])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.regression.line (see issue [https://github.com/OSGeo/grass/pull/5950 #5950]).&lt;br /&gt;
* Add JSON output support to r.stats.quantile (see issue [https://github.com/OSGeo/grass/pull/5951 #5951]).&lt;br /&gt;
* Add JSON output support to r.volume (see issue [https://github.com/OSGeo/grass/pull/5949 #5949]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-5 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.line (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.line''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5993 #5993])&lt;br /&gt;
* '''r.stats.quantile (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats.quantile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6007 #6007])&lt;br /&gt;
* '''r.volume (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.volume''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6036 #6036])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to m.measure (see issue [https://github.com/OSGeo/grass/pull/6006 #6006]).&lt;br /&gt;
* Add JSON output support to db.columns (see issue [https://github.com/OSGeo/grass/pull/6008 #6008]).&lt;br /&gt;
* Add JSON output support to db.connect (see issue [https://github.com/OSGeo/grass/pull/6009 #6009]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-6 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''db.columns''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6042 #6042])&lt;br /&gt;
* '''m.measure (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''m.measure''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6053 #6053])&lt;br /&gt;
* '''db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6059 #6059])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to v.db.connect (see issue [https://github.com/OSGeo/grass/pull/6014 #6014]).&lt;br /&gt;
* Add JSON output support to r.regression.multi (see issue [https://github.com/OSGeo/grass/pull/6010 #6010]).&lt;br /&gt;
* If time permits, add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* If time permits, add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-7 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.multi (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''v.db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.multi''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6075 #6075])&lt;br /&gt;
* '''v.db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6077 #6077])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* Add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
* If time permits, add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-8 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.findfile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6091 #6091])&lt;br /&gt;
* '''r3.info (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a flag-handling bug.&lt;br /&gt;
* '''r3.info''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6103 #6103])&lt;br /&gt;
* '''v.what.rast (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a sorting bug.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
* Update format to CSV instead of shell in v.category (see issue [https://github.com/OSGeo/grass/pull/6025 #6025]).&lt;br /&gt;
* Add CSV output support to r.stats (see issue [https://github.com/OSGeo/grass/issues/5835 #5835]).&lt;br /&gt;
* If time permits, add CSV output support to r.profile (see issue [https://github.com/OSGeo/grass/issues/5958 #5958]).&lt;br /&gt;
* If time permits, add CSV headers to r.volume (see issue [https://github.com/OSGeo/grass/issues/6049 #6049]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I don’t have any blockers this week. However, I’ll be a little busy with some personal work from August 3 to August 10, so I’ll try to complete next week’s tasks this week itself.&lt;br /&gt;
&lt;br /&gt;
== Week-9 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.category''': Updated format to CSV instead of shell. (See PR [https://github.com/OSGeo/grass/pull/6132 #6132])&lt;br /&gt;
* '''r.stats''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6133 #6133])&lt;br /&gt;
* '''r.volume''': Implemented CSV column headers support. (See PR [https://github.com/OSGeo/grass/pull/6134 #6134])&lt;br /&gt;
* '''v.what.rast''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6140 #6140])&lt;br /&gt;
* '''r.profile''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6145 #6145])&lt;br /&gt;
* '''r.distance (regression tests)''': Updated regression tests to ensure backward compatibility with new JSON support. (See PR [https://github.com/OSGeo/grass/pull/6150 #6150])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* I’ll be a bit busy with some personal work from August 3 to 10, so I completed next week’s tasks last week itself. I’ve already informed my mentors about my limited availability.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* Yes, I’ll be a bit busy with some personal work from August 3 to 10.&lt;br /&gt;
&lt;br /&gt;
== Week-10 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* This week I was busy with some personal work, so I did not complete any additional tasks. However, I had already finished this week’s tasks last week. This week, I mostly focused on handling reviews for those PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.distance (see issue [https://github.com/OSGeo/grass/issues/6135 #6135]).&lt;br /&gt;
* Add JSON output support to v.class (see issue [https://github.com/OSGeo/grass/issues/6136 #6136]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-11 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.distance''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6204 #6204])&lt;br /&gt;
* '''v.class''': Updated regression tests to ensure backward compatibility with new JSON support and fixed a out-of-bounds bug. (See PR [https://github.com/OSGeo/grass/pull/6205 #6205])&lt;br /&gt;
* '''v.class''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6210 #6210])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Discuss next week’s tasks with my mentors, if no issues are assigned, I’ll identify tools that currently lack JSON support and evaluate which ones are feasible to add it to.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-12 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.what''': Updated JSON output format. (See PR [https://github.com/OSGeo/grass/pull/6252 #6252])&lt;br /&gt;
* Addressed review comments on my open PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
= Final Report =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Title''' || Add JSON output to different tools in C for GRASS&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo (Open Source Geospatial Foundation)]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''Program''' || Google Summer of Code 2025&lt;br /&gt;
|-&lt;br /&gt;
| '''Contributions''' || [https://github.com/OSGeo/grass/pulls?q=is%3Apr+author%3ANishantBansal2003+ Pull Requests]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
During my GSoC project, I addressed the challenge that most GRASS tools produced only plain text output, forcing users to write custom parsing code for Python-based workflows. The task was to make these tools more data-science friendly by adding structured output formats. To achieve this, I extended the use of the Parson library to implement consistent JSON output across multiple modules, refined the JSON structure introduced in the previous GSoC, and added optional support for SHELL and CSV outputs where appropriate. I developed comprehensive Python test cases, ensured backward compatibility, and provided documentation with practical examples such as loading JSON into pandas. As a result, GRASS users can now directly consume structured outputs in modern workflows, reducing parsing overhead, improving interoperability, and paving the way for broader adoption of GRASS in data science contexts.&lt;br /&gt;
&lt;br /&gt;
== The state of integration BEFORE the start of GSoC ==&lt;br /&gt;
Before the start of GSoC, the integration of GRASS with data science workflows was limited due to several challenges. The JSON outputs introduced in the previous GSoC contained deeply nested hierarchies, making them difficult to use directly with libraries such as '''pandas''' or in broader data science pipelines. While some tools already supported JSON (e.g., &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;), many important and highly demanded modules lacked JSON support, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt; and many more. This lack of consistency limited the seamless adoption of GRASS in analytics and machine learning contexts. Moreover, there was no clear '''documentation of the JSON schema''' or guidance on how to parse and utilize these outputs effectively in '''python or pandas''', which made it difficult for users to understand the use cases and integrate GRASS outputs into modern data science workflows.&lt;br /&gt;
&lt;br /&gt;
== The state of integration AFTER GSoC ==&lt;br /&gt;
&lt;br /&gt;
After GSoC, the integration state of JSON and alternative output formats in GRASS has significantly improved. I refactored the JSON structures for tools such as &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;, and others, removing unnecessary nesting introduced during the previous GSoC. This makes their outputs much easier to consume directly in &amp;lt;b&amp;gt;Python&amp;lt;/b&amp;gt; or with &amp;lt;b&amp;gt;pandas&amp;lt;/b&amp;gt;. In addition, JSON support has been extended to many essential and frequently used modules, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;, and many more. I also added detailed documentation of the JSON schema and provided examples showing how to parse and use these outputs effectively with Python and pandas. Together, these improvements make the adoption of GRASS in modern &amp;lt;b&amp;gt;data science workflows&amp;lt;/b&amp;gt; far more seamless and accessible.&lt;br /&gt;
&lt;br /&gt;
=== Enhancements made per tool ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;: Simplified JSON structure for univariate statistics, removed unnecessary hierarchy, and added new output format options (CSV, shell).&lt;br /&gt;
* &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;: Added JSON support for querying raster map colors, with a Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;: Added JSON support for reporting the current mapset, with a Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;: Updated JSON structure for raster map metadata, removing hierarchy for easier parsing. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;: Simplified JSON output for geographic region boundaries, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;: Added JSON support for GRASS version information, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;: Added JSON support for listing imagery groups, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;: Added JSON and CSV support for raster area statistics, with Python and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;: Refined JSON schema for nearest element queries, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;: Added JSON support for listing GRASS database files, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;: Updated JSON schema for printing vector attribute values, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;: Simplified JSON output, added CSV support, and included a matplotlib example for profile visualization.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;: Updated JSON schema for linear regression between rasters, with Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;: Updated JSON schema for category quantiles, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;: Added JSON support for raster volume calculations, fixed missing headers in CSV output, and provided pandas examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.columns&amp;lt;/code&amp;gt;: Added JSON output for listing database table columns, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;: Added JSON output for measuring lengths and areas, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.connect&amp;lt;/code&amp;gt;: Added JSON output for DB connection info, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.multi&amp;lt;/code&amp;gt;: Added JSON output for multiple regression between rasters, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.db.connect&amp;lt;/code&amp;gt;: Added JSON output for vector map attribute connections, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.findfile&amp;lt;/code&amp;gt;: Added JSON output for GRASS database file search, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;: Added JSON output for 3D raster map info, with Python example. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;: Added JSON output for extracting raster values at vector points, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt;: Added JSON and CSV support for locating closest points between raster objects, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;: Added JSON and CSV support for attribute data, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;: Migrated from manually written JSON to Parson-based JSON output, simplified schema, and provided Python parsing examples.&lt;br /&gt;
&lt;br /&gt;
All these changes were accompanied by regression tests to ensure that new JSON/CSV/SHELL/PLAIN output options do not break existing functionality. Additionally, I introduced comprehensive Python test cases for these outputs, making the enhancements reliable and future-proof. During this work, I also fixed several bugs in modules such as &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;, strengthening the stability of GRASS as a whole.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
To sum up, I’m glad to have met the three core objectives of my project with the constant support of my mentors:&lt;br /&gt;
&lt;br /&gt;
* Brought JSON output to several important and long-requested modules, added regression tests, and ensured reliable future test coverage.&lt;br /&gt;
* Enhanced the JSON schema introduced in last year’s GSoC by reducing unnecessary hierarchy, making it more consistent across tools, and providing Python/Pandas examples for practical use.&lt;br /&gt;
* Expanded &amp;lt;b&amp;gt;CSV&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;SHELL&amp;lt;/b&amp;gt; output formats to additional tools where they could bring value.&lt;br /&gt;
&lt;br /&gt;
This journey has been both rewarding and educational, and I’m grateful for the opportunity to contribute to GRASS through GSoC 2025. I especially want to thank &amp;lt;b&amp;gt;Anna Petrasova&amp;lt;/b&amp;gt; and the GRASS Development Team for their guidance and support. I’m excited to keep building on this work and further extend JSON and other features in the future.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
There is significant scope to extend structured output support across GRASS tools. In particular, future efforts should focus on:&lt;br /&gt;
* Expanding JSON output to additional modules, with details tracked here: [https://github.com/orgs/OSGeo/projects/10 GRASS JSON Outputs Project].&lt;br /&gt;
* Refining and standardizing the JSON schema to better support complex workflows and integrations.&lt;br /&gt;
* Exploring and implementing other output formats (e.g., SHELL, CSV, PLAIN) where they can improve usability and automation.&lt;br /&gt;
I also plan to continue contributing to GRASS by extending JSON support to more modules and engaging in community discussions around schema design and format integration.&lt;br /&gt;
&lt;br /&gt;
== Log of Pull Requests ==&lt;br /&gt;
Below is a list of pull requests submitted to the GRASS repository during GSoC 2025:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pull Request !! Description  !! Date   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5688 #5688] || r.univar: Fix JSON structure || May 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5773 #5773] || r.what.color: Add test file || May 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5775 #5775] || g.mapset: Add test file || May 26, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5784 #5784] || r.info: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;Closed&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5785 #5785] || g.region: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5810 #5810] || g.mapset: Add JSON support || June 2, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5821 #5821] || r.univar: Fix uninitialized zone_value || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5822 #5822] || r.what.color: Add JSON support || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5842 #5842] || r.info: Update test file || June 5, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5859 #5859] || r.info: Improve interface || June 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5863 #5863] || g.version: Add JSON support || June 9, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5870 #5870] || i.group: Add JSON support || June 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5879 #5879] || r.stats: Add test file || June 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5892 #5892] || r.stats: Add tests for JSON output || June 14, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5898 #5898] || v.distance: Update JSON format || June 16, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5900 #5900] || r.stats: fix uninitialised window value || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5906 #5906] || g.list: Add test file || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5921 #5921] || g.list: Add JSON support || June 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5929 #5929] || g.region: Update JSON format || June 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5946 #5946] || v.to.db: Update JSON format || June 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5962 #5962] || r.profile: Update JSON format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5966 #5966] || r.univar: Add shell and CSV format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5990 #5990] || r.regression.line: Add test file || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5993 #5993] || r.regression.line: Add JSON support || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6002 #6002] || r.stats.quantile: Add test file || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6007 #6007] || r.stats.quantile: Add JSON support || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6027 #6027] || r.volume: Add test file || July 4, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6036 #6036] || r.volume: Add JSON support || July 6, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6042 #6042] || db.columns: Add JSON support || July 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6051 #6051] || m.measure: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6052 #6052] || db.connect: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6053 #6053] || m.measure: Add JSON support || July 11, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6059 #6059] || db.connect: Add JSON support || July 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6066 #6066] || r.regression.multi: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6067 #6067] || v.db.connect: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6075 #6075] || r.regression.multi: Add JSON support || July 18, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6077 #6077] || v.db.connect: Add JSON support || July 19, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6091 #6091] || g.findfile: Add JSON support || July 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6098 #6098] || r3.info: Add test file || July 22, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6103 #6103] || r3.info: Add JSON support || July 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6109 #6109] || v.what.rast: Add test file || July 24, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6132 #6132] || v.category: Use CSV format instead of shell format || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6133 #6133] || r.stats: add CSV support || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6134 #6134] || r.volume: add csv column headers || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6140 #6140] || v.what.rast: Add JSON support || July 29, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6145 #6145] || r.profile: Add CSV support || July 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6150 #6150] || r.distance: Update existing test cases || August 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6204 #6204] || r.distance: Add JSON and CSV support || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6205 #6205] || v.class: Add more test cases and fix out-of-bounds bug || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6210 #6210] || v.class: Add JSON and CSV support || August 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6252 #6252] || v.what: Update JSON output format || August 23, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Additional Links ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Ttile&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| Project Wiki Page&lt;br /&gt;
| [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C Add JSON output to different tools in C for GRASS]&lt;br /&gt;
|-&lt;br /&gt;
| Github Fork&lt;br /&gt;
| [https://github.com/NishantBansal2003/grass GitHub Fork]&lt;br /&gt;
|-&lt;br /&gt;
| GSoC Page&lt;br /&gt;
| [https://summerofcode.withgoogle.com/programs/2025/projects/GPVGd3DH Link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples &amp;amp; Images ==&lt;br /&gt;
Below is a list of some of the tasks I completed during my GSoC. Please note that this is not a complete list. For more details on these and other tools, please check out the GRASS documentation from the PR links provided above.&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; JSON output in Python ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; can be directly loaded into a pandas DataFrame and used for plotting with matplotlib.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
# Run r.profile command&lt;br /&gt;
elevation = gs.read_command(&lt;br /&gt;
    &amp;quot;r.profile&amp;quot;,&lt;br /&gt;
    input=&amp;quot;elevation&amp;quot;,&lt;br /&gt;
    coordinates=&amp;quot;641712,226095,641546,224138,641546,222048,641049,221186&amp;quot;,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
    flags=&amp;quot;gc&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Load the JSON data into a dataframe&lt;br /&gt;
df = pd.read_json(elevation)&lt;br /&gt;
print(df)&lt;br /&gt;
&lt;br /&gt;
# Create the scatter plot&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
plt.scatter(df[&amp;quot;distance&amp;quot;], df[&amp;quot;value&amp;quot;], c=df[&amp;quot;color&amp;quot;], marker=&amp;quot;o&amp;quot;)&lt;br /&gt;
plt.title(&amp;quot;Profile of Distance vs. Elevation with Color Coding&amp;quot;)&lt;br /&gt;
plt.xlabel(&amp;quot;Distance (meters)&amp;quot;)&lt;br /&gt;
plt.ylabel(&amp;quot;Elevation&amp;quot;)&lt;br /&gt;
plt.grid(True)&lt;br /&gt;
plt.show()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame Output (first 10 rows) ====  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
         easting       northing   distance      value    color&lt;br /&gt;
0  641712.000000  226095.000000   0.000000  84.661507  #71FF00&lt;br /&gt;
1  641711.154826  226085.036106   9.999675  84.511765  #6FFF00&lt;br /&gt;
2  641710.309651  226075.072213  19.999349  84.241806  #6BFF00&lt;br /&gt;
3  641709.464477  226065.108319  29.999024  84.304214  #6CFF00&lt;br /&gt;
4  641708.619302  226055.144426  39.998699  84.174400  #6AFF00&lt;br /&gt;
5  641707.774128  226045.180532  49.998374  84.112534  #6AFF00&lt;br /&gt;
6  641706.928954  226035.216639  59.998048  84.011208  #68FF00&lt;br /&gt;
7  641706.083779  226025.252745  69.997723  83.834084  #66FF00&lt;br /&gt;
8  641705.238605  226015.288851  79.997398  83.870193  #67FF00&lt;br /&gt;
9  641704.393430  226005.324958  89.997073  84.194908  #6BFF00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Visualization ====  &lt;br /&gt;
&lt;br /&gt;
Matplotlib scatter plot generated from the &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; JSON output: &lt;br /&gt;
&lt;br /&gt;
[[File:R profile plot.png]]&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt; can be directly loaded into a pandas DataFrame.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.class&amp;quot;,&lt;br /&gt;
    map=&amp;quot;bridges&amp;quot;,&lt;br /&gt;
    column=&amp;quot;YEAR_BUILT&amp;quot;,&lt;br /&gt;
    algorithm=&amp;quot;std&amp;quot;,&lt;br /&gt;
    nbclasses=5,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data[&amp;quot;intervals&amp;quot;])&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output (intervals) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
          from           to  frequency&lt;br /&gt;
0  1891.000000  1938.829689        750&lt;br /&gt;
1  1938.829689  1954.722836       1841&lt;br /&gt;
2  1954.722836  1970.615983       5556&lt;br /&gt;
3  1970.615983  1986.509130       1788&lt;br /&gt;
4  1986.509130  1997.000000       1003&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame to display categories and values.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.what.rast&amp;quot;, map=&amp;quot;bridges&amp;quot;, raster=&amp;quot;elevation&amp;quot;, flags=&amp;quot;p&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    category       value&lt;br /&gt;
0       4635   86.851212&lt;br /&gt;
1       4648   87.883255&lt;br /&gt;
2       4688  103.382004&lt;br /&gt;
3       4709   67.387856&lt;br /&gt;
4       4986   90.972832&lt;br /&gt;
5       4991   86.550629&lt;br /&gt;
6       5027   84.256355&lt;br /&gt;
7       5060   79.500443&lt;br /&gt;
8       5071   78.732864&lt;br /&gt;
9       5089   85.703636&lt;br /&gt;
10      5096  115.967323&lt;br /&gt;
11      5130   81.055870&lt;br /&gt;
12      5150   92.812927&lt;br /&gt;
13      5166   88.149483&lt;br /&gt;
14      5184   76.426331&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test Suite Update ====&lt;br /&gt;
Added 6 tests to the test suite, including both regression tests and future-proof tests to ensure functionality remains reliable in future updates.&lt;br /&gt;
&lt;br /&gt;
[[File:V what rast test file.png|700px]]&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame to locate closest points.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
&lt;br /&gt;
result = gs.parse_command(&lt;br /&gt;
    &amp;quot;r.distance&amp;quot;, map=[&amp;quot;zipcodes&amp;quot;, &amp;quot;lakes&amp;quot;], flags=&amp;quot;l&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
df = pd.json_normalize(result)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output (first 10 rows, truncated) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
       distance  from_cell.category  from_cell.easting  ...  to_cell.easting to_cell.northing  to_cell.label&lt;br /&gt;
0  11158.507466               27511      632604.951740  ...    640584.676990    215499.220687       Dam/Weir&lt;br /&gt;
1   1037.271198               27511      631734.981693  ...    632314.961724    221839.026534      Lake/Pond&lt;br /&gt;
2   2276.988836               27511      630015.040913  ...    630765.015090    219459.099418      Reservoir&lt;br /&gt;
3  14614.155031               27513      631055.005106  ...    640584.676990    215499.220687       Dam/Weir&lt;br /&gt;
4   3635.876453               27513      631674.983759  ...    635164.863600    227198.862392      Lake/Pond&lt;br /&gt;
5   6971.335517               27513      630005.041257  ...    630765.015090    219459.099418      Reservoir&lt;br /&gt;
6   8978.927486               27518      632134.967922  ...    640424.682499    215209.229568       Dam/Weir&lt;br /&gt;
7      0.000000               27518      630005.041257  ...    630005.041257    220199.076757      Lake/Pond&lt;br /&gt;
8    699.975899               27518      630005.041257  ...    630705.017156    219379.101868      Reservoir&lt;br /&gt;
9    509.197766               27529      641154.657366  ...    640674.673892    215249.228343       Dam/Weir&lt;br /&gt;
&lt;br /&gt;
[10 rows x 9 columns]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.distance&amp;quot;,&lt;br /&gt;
    flags=&amp;quot;p&amp;quot;,&lt;br /&gt;
    from_=&amp;quot;busroute_a&amp;quot;,&lt;br /&gt;
    to=&amp;quot;busstopsall&amp;quot;,&lt;br /&gt;
    upload=&amp;quot;dist,to_attr&amp;quot;,&lt;br /&gt;
    to_column=&amp;quot;routes&amp;quot;,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
   from_cat  to_cat      dist to_attr&lt;br /&gt;
0         1     112  0.142812     8,A&lt;br /&gt;
1         2      44  0.102327     9,A&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;r.volume&amp;quot;, input=&amp;quot;elevation&amp;quot;, clump=&amp;quot;geology_30m&amp;quot;, flags=&amp;quot;p&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    category  average         sum   cells        volume  easting  northing&lt;br /&gt;
0        217   118.93 86288827.99  725562 8628882798.63   635325    221535&lt;br /&gt;
1        262   108.97 21650560.37  198684 2165056037.02   638935    222495&lt;br /&gt;
2        270    92.23 63578874.44  689373 6357887443.53   642405    221485&lt;br /&gt;
3        405   132.96 33732662.09  253710 3373266208.59   631835    224095&lt;br /&gt;
4        583   139.35  3011288.22   21609  301128821.55   630205    224665&lt;br /&gt;
5        720   124.30   599618.16    4824   59961816.06   634075    227995&lt;br /&gt;
6        766   132.43   936791.20    7074   93679120.08   631425    227845&lt;br /&gt;
7        862   118.31  7302317.47   61722  730231746.74   630505    218885&lt;br /&gt;
8        910    94.20  4235816.13   44964  423581613.11   639215    216365&lt;br /&gt;
9        921   135.22  1693985.23   12528  169398523.05   630755    215445&lt;br /&gt;
10       945   127.24     1145.12       9     114512.03   630015    215015&lt;br /&gt;
11       946    89.91   365748.34    4068   36574833.85   639085    215255&lt;br /&gt;
12       948   129.02   112631.82     873   11263181.57   630185    215115&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test Suite Update ====&lt;br /&gt;
&lt;br /&gt;
Added 4 tests to the test suite, including both regression tests and future-proof tests to ensure functionality remains reliable in future updates.&lt;br /&gt;
&lt;br /&gt;
[[File:Test cmd 2.png|600px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Test cmd output 2.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{GSoC}}&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28689</id>
		<title>GRASS GSoC 2025 Add JSON output to different tools in C</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28689"/>
		<updated>2025-08-24T14:39:31Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: /* Week-12 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Nishant Bansal&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo - Open Source Geospatial Foundation]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/NishantBansal2003/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''GSoC proposal''' || [https://docs.google.com/document/d/1ZPQ9RXU7b_RUDmBmAMeK7ZjFAV1WC7Urd1Zlz678jyw/edit?tab=t.0#heading=h.z6ne0og04bp5 View Proposal]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Abstract =&lt;br /&gt;
Currently, most GRASS tools produce data in plain text by default. This means that users who want to process the output in Python need to create custom parsing code. To make this easier, several modules could be improved by oﬀering JSON as an alternative output format. Recently, the Parson library was added to the GRASS codebase to support JSON output in addition to plain text. Building on the advancements made during the last GSoC, my project aims to expand JSON output capabilities to more tools using the Parson library. I will also work on making the JSON structure introduced in the previous GSoC more useful and consistent. Additionally, I plan to add support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
&lt;br /&gt;
# Working with mentors to finalize the structure of the JSON output.&lt;br /&gt;
# Adding an option to choose the output format (plain text or JSON) for each updated tool.&lt;br /&gt;
# Make the JSON structure introduced during the last GSoC more useful and consistent across tools.&lt;br /&gt;
# Developing Python test cases to ensure that the JSON output works correctly and to avoid future issues.&lt;br /&gt;
# Providing basic documentation and example JSON outputs for each modified tool.&lt;br /&gt;
# Adding support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
# Develop simple examples demonstrating how to use JSON output in a data science workflow, such as reading JSON data into pandas or python.&lt;br /&gt;
&lt;br /&gt;
= Timeline =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Period !! Timeline  !! Tasks   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period &lt;br /&gt;
||&lt;br /&gt;
May 8 - June 1  &lt;br /&gt;
|| &lt;br /&gt;
# Reviewed the work done during the last GSoC to stabilize the JSON output.&lt;br /&gt;
# Discussed the priority tools for adding JSON support.&lt;br /&gt;
# Read GRASS documentation to add Python and JSON examples to the documentation.&lt;br /&gt;
|| &lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;13&amp;quot; | Official Coding Period &lt;br /&gt;
|-&lt;br /&gt;
| '''Week 1''' (June 2 - June 8) || &lt;br /&gt;
# Add JSON support for g.mapset [https://github.com/OSGeo/grass/pull/5810 #5810]&lt;br /&gt;
# Fix uninitialized zone_value in r.univar [https://github.com/OSGeo/grass/pull/5821 #5821]&lt;br /&gt;
# Add JSON support for r.what.color [https://github.com/OSGeo/grass/pull/5822 #5822]&lt;br /&gt;
# Update test file in r.info [https://github.com/OSGeo/grass/pull/5842 #5842]&lt;br /&gt;
# Improve interface for r.info [https://github.com/OSGeo/grass/pull/5859 #5859]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 2''' (June 9 - June 15) ||&lt;br /&gt;
# Add JSON support for g.version [https://github.com/OSGeo/grass/pull/5863 #5863]&lt;br /&gt;
# Add JSON support for i.group [https://github.com/OSGeo/grass/pull/5870 #5870]&lt;br /&gt;
# Add test file in r.stats [https://github.com/OSGeo/grass/pull/5879 #5879]&lt;br /&gt;
# Add tests for JSON output in r.stats [https://github.com/OSGeo/grass/pull/5892 #5892]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 3''' (June 16 - June 22) ||&lt;br /&gt;
# Update the JSON output schema of v.distance [https://github.com/OSGeo/grass/pull/5898 #5898]&lt;br /&gt;
# Fix uninitialized window variable in r.stats [https://github.com/OSGeo/grass/pull/5900 #5900]&lt;br /&gt;
# Add test file in g.list [https://github.com/OSGeo/grass/pull/5906 #5906]&lt;br /&gt;
# Add JSON support for g.list [https://github.com/OSGeo/grass/pull/5921 #5921]&lt;br /&gt;
# Update the JSON output schema of g.region [https://github.com/OSGeo/grass/pull/5929 #5929]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 4''' (June 23 - June 29) ||&lt;br /&gt;
# Update the JSON output schema of v.to.db [https://github.com/OSGeo/grass/pull/5946 #5946]&lt;br /&gt;
# Update the JSON output schema of r.profile [https://github.com/OSGeo/grass/pull/5962 #5962]&lt;br /&gt;
# Add SHELL and CSV output support for r.univar [https://github.com/OSGeo/grass/pull/5966 #5966]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 5''' (June 30 - July 6) ||&lt;br /&gt;
# Add test file in r.regression.line [https://github.com/OSGeo/grass/pull/5990 #5990]&lt;br /&gt;
# Add JSON support for r.regression.line [https://github.com/OSGeo/grass/pull/5993 #5993]&lt;br /&gt;
# Add test file in r.stats.quantile [https://github.com/OSGeo/grass/pull/6002 #6002]&lt;br /&gt;
# Add JSON support for r.stats.quantile [https://github.com/OSGeo/grass/pull/6007 #6007]&lt;br /&gt;
# Add test file in r.volume [https://github.com/OSGeo/grass/pull/6027 #6027]&lt;br /&gt;
# Add JSON support for r.volume [https://github.com/OSGeo/grass/pull/6036 #6036]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 6''' (July 7 - July 13) ||&lt;br /&gt;
# Add JSON support for db.columns [https://github.com/OSGeo/grass/pull/6042 #6042]&lt;br /&gt;
# Add test file in m.measure [https://github.com/OSGeo/grass/pull/6051 #6051]&lt;br /&gt;
# Add test file in db.connect [https://github.com/OSGeo/grass/pull/6052 #6052]&lt;br /&gt;
# Add JSON support for m.measure [https://github.com/OSGeo/grass/pull/6053 #6053]&lt;br /&gt;
# Add JSON support for db.connect [https://github.com/OSGeo/grass/pull/6059 #6059]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | '''Week 7''' (July 14 - July 20) ||&lt;br /&gt;
# Add test file in r.regression.multi [https://github.com/OSGeo/grass/pull/6066 #6066]&lt;br /&gt;
# Add test file in v.db.connect [https://github.com/OSGeo/grass/pull/6067 #6067]&lt;br /&gt;
# Add JSON support for r.regression.multi [https://github.com/OSGeo/grass/pull/6075 #6075]&lt;br /&gt;
# Add JSON support for v.db.connect [https://github.com/OSGeo/grass/pull/6077 #6077]&lt;br /&gt;
# Submit MidTerm evaluation.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 8''' (July 21 - July 27) ||&lt;br /&gt;
# Add JSON support for g.findfile [https://github.com/OSGeo/grass/pull/6091 #6091]&lt;br /&gt;
# Add test file in r3.info [https://github.com/OSGeo/grass/pull/6098 #6098]&lt;br /&gt;
# Add JSON support for r3.info [https://github.com/OSGeo/grass/pull/6103 #6103]&lt;br /&gt;
# Add test file in v.what.rast [https://github.com/OSGeo/grass/pull/6109 #6109]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 9''' (July 28 - August 3) ||&lt;br /&gt;
# Update format to CSV instead of shell in v.category [https://github.com/OSGeo/grass/pull/6132 #6132]&lt;br /&gt;
# Add CSV output support to r.stats [https://github.com/OSGeo/grass/pull/6133 #6133]&lt;br /&gt;
# Add CSV headers to r.volume [https://github.com/OSGeo/grass/pull/6134 #6134]&lt;br /&gt;
# Add JSON support for v.what.rast [https://github.com/OSGeo/grass/pull/6140 #6140]&lt;br /&gt;
# Add CSV output support to r.profile [https://github.com/OSGeo/grass/pull/6145 #6145]&lt;br /&gt;
# Update test cases in r.distance [https://github.com/OSGeo/grass/pull/6150 #6150]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 10''' (August 4 - August 10) ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 11''' (August 11 - August 17) ||&lt;br /&gt;
# Add JSON and CSV support for r.distance [https://github.com/OSGeo/grass/pull/6204 #6204]&lt;br /&gt;
# Add more test cases in v.class [https://github.com/OSGeo/grass/pull/6205 #6205]&lt;br /&gt;
# Add JSON and CSV support for v.class [https://github.com/OSGeo/grass/pull/6210 #6210]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 12''' (August 18 - August 24) ||&lt;br /&gt;
# Update JSON output format for v.what [https://github.com/OSGeo/grass/pull/6252 #6252]&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Evaluation Period &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | August 25 - September 1 ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
# Submit code, final evaluation and write the final GSoC report.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Reports =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* Introduced myself on the [https://discourse.osgeo.org/t/gsoc-2025-introduction-nishant-bansal/147005 OSGeo Discourse mailing list].&lt;br /&gt;
* Created both my [https://wiki.osgeo.org/wiki/User:Nishantbansal2003 personal Wiki page] and the [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C project Wiki page], adding all necessary project-related information.&lt;br /&gt;
* Read GRASS documentation to support the addition of Python and JSON examples.&lt;br /&gt;
* Worked on the following pull requests:&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5688 #5688]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5773 #5773]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5775 #5775]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5784 #5784]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5785 #5785]&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to the g.mapset and r.what.color modules.&lt;br /&gt;
* If time permits, I will begin improving the r.info interface: [https://github.com/OSGeo/grass/issues/5793 Issue #5793]&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
'''Project Discussions and Meetings'''&lt;br /&gt;
* '''14 May 2025''': Introductory meeting discussing JSON support and overall project milestones.&lt;br /&gt;
* '''21 May 2025''': Introduction with fellow developers. Discussed priority tools, adding Python/Pandas examples, and approaches for finalizing the JSON schema for each module.&lt;br /&gt;
&lt;br /&gt;
== Week-1 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.mapset''': Added JSON output support, now you can use -p and -l flags to get JSON-formatted results.&lt;br /&gt;
* '''r.univar''': Fixed a bug causing an uninitialized zone_value.&lt;br /&gt;
* '''r.what.color''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5822 #5822])&lt;br /&gt;
* '''r.info (regression tests)''': To maintain backward compatibility while updating its interface, I added strong regression tests.&lt;br /&gt;
* '''r.info (interface improvements)''': Began improving the module’s interface. (See PR [https://github.com/OSGeo/grass/pull/5859 #5859])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.version (see issue [https://github.com/OSGeo/grass/issues/5816 #5816]).&lt;br /&gt;
* Add JSON output support to i.group (see issue [https://github.com/OSGeo/grass/issues/5815 #5815]).&lt;br /&gt;
* If time permits, write tests for r.stats (see issue [https://github.com/OSGeo/grass/issues/5814 #5814]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-2 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.version''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5863 #5863])&lt;br /&gt;
* '''i.group''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5870 #5870])&lt;br /&gt;
* '''r.stats (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats''': Added tests for JSON output; this uncovered a bug, which was fixed alongside.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.distance (see issue [https://github.com/OSGeo/grass/issues/5846 #5846]).&lt;br /&gt;
* Add JSON output support to g.list (see issue [https://github.com/OSGeo/grass/issues/5848 #5848]).&lt;br /&gt;
* If time permits, fix the JSON output format of g.region (see issue [https://github.com/OSGeo/grass/issues/5828 #5828]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-3 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.distance''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5898 #5898])&lt;br /&gt;
* '''r.stats''': Fixed a bug causing an uninitialized &amp;lt;code&amp;gt;window&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
* '''g.list (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''g.list''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5921 #5921])&lt;br /&gt;
* '''g.region''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5929 #5929])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.to.db (see issue [https://github.com/OSGeo/grass/pull/5711 #5711]).&lt;br /&gt;
* Update JSON output format and documentation of r.profile (see issue [https://github.com/OSGeo/grass/pull/5834 #5834]).&lt;br /&gt;
* If time permits, add shell and csv output formats to r.univar (see issue [https://github.com/OSGeo/grass/pull/5824 #5824]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-4 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.to.db''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5946 #5946])&lt;br /&gt;
* '''r.profile''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5962 #5962])&lt;br /&gt;
* '''r.univar''': Implemented SHELL and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/5966 #5966])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.regression.line (see issue [https://github.com/OSGeo/grass/pull/5950 #5950]).&lt;br /&gt;
* Add JSON output support to r.stats.quantile (see issue [https://github.com/OSGeo/grass/pull/5951 #5951]).&lt;br /&gt;
* Add JSON output support to r.volume (see issue [https://github.com/OSGeo/grass/pull/5949 #5949]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-5 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.line (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.line''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5993 #5993])&lt;br /&gt;
* '''r.stats.quantile (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats.quantile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6007 #6007])&lt;br /&gt;
* '''r.volume (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.volume''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6036 #6036])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to m.measure (see issue [https://github.com/OSGeo/grass/pull/6006 #6006]).&lt;br /&gt;
* Add JSON output support to db.columns (see issue [https://github.com/OSGeo/grass/pull/6008 #6008]).&lt;br /&gt;
* Add JSON output support to db.connect (see issue [https://github.com/OSGeo/grass/pull/6009 #6009]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-6 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''db.columns''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6042 #6042])&lt;br /&gt;
* '''m.measure (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''m.measure''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6053 #6053])&lt;br /&gt;
* '''db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6059 #6059])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to v.db.connect (see issue [https://github.com/OSGeo/grass/pull/6014 #6014]).&lt;br /&gt;
* Add JSON output support to r.regression.multi (see issue [https://github.com/OSGeo/grass/pull/6010 #6010]).&lt;br /&gt;
* If time permits, add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* If time permits, add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-7 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.multi (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''v.db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.multi''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6075 #6075])&lt;br /&gt;
* '''v.db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6077 #6077])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* Add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
* If time permits, add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-8 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.findfile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6091 #6091])&lt;br /&gt;
* '''r3.info (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a flag-handling bug.&lt;br /&gt;
* '''r3.info''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6103 #6103])&lt;br /&gt;
* '''v.what.rast (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a sorting bug.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
* Update format to CSV instead of shell in v.category (see issue [https://github.com/OSGeo/grass/pull/6025 #6025]).&lt;br /&gt;
* Add CSV output support to r.stats (see issue [https://github.com/OSGeo/grass/issues/5835 #5835]).&lt;br /&gt;
* If time permits, add CSV output support to r.profile (see issue [https://github.com/OSGeo/grass/issues/5958 #5958]).&lt;br /&gt;
* If time permits, add CSV headers to r.volume (see issue [https://github.com/OSGeo/grass/issues/6049 #6049]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I don’t have any blockers this week. However, I’ll be a little busy with some personal work from August 3 to August 10, so I’ll try to complete next week’s tasks this week itself.&lt;br /&gt;
&lt;br /&gt;
== Week-9 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.category''': Updated format to CSV instead of shell. (See PR [https://github.com/OSGeo/grass/pull/6132 #6132])&lt;br /&gt;
* '''r.stats''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6133 #6133])&lt;br /&gt;
* '''r.volume''': Implemented CSV column headers support. (See PR [https://github.com/OSGeo/grass/pull/6134 #6134])&lt;br /&gt;
* '''v.what.rast''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6140 #6140])&lt;br /&gt;
* '''r.profile''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6145 #6145])&lt;br /&gt;
* '''r.distance (regression tests)''': Updated regression tests to ensure backward compatibility with new JSON support. (See PR [https://github.com/OSGeo/grass/pull/6150 #6150])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* I’ll be a bit busy with some personal work from August 3 to 10, so I completed next week’s tasks last week itself. I’ve already informed my mentors about my limited availability.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* Yes, I’ll be a bit busy with some personal work from August 3 to 10.&lt;br /&gt;
&lt;br /&gt;
== Week-10 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* This week I was busy with some personal work, so I did not complete any additional tasks. However, I had already finished this week’s tasks last week. This week, I mostly focused on handling reviews for those PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.distance (see issue [https://github.com/OSGeo/grass/issues/6135 #6135]).&lt;br /&gt;
* Add JSON output support to v.class (see issue [https://github.com/OSGeo/grass/issues/6136 #6136]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-11 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.distance''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6204 #6204])&lt;br /&gt;
* '''v.class''': Updated regression tests to ensure backward compatibility with new JSON support and fixed a out-of-bounds bug. (See PR [https://github.com/OSGeo/grass/pull/6205 #6205])&lt;br /&gt;
* '''v.class''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6210 #6210])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Discuss next week’s tasks with my mentors, if no issues are assigned, I’ll identify tools that currently lack JSON support and evaluate which ones are feasible to add it to.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-12 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.what''': Updated JSON output format. (See PR [https://github.com/OSGeo/grass/pull/6252 #6252])&lt;br /&gt;
* Addressed review comments on my open PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
= Final Report =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Title''' || Add JSON output to different tools in C for GRASS&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo (Open Source Geospatial Foundation)]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''Program''' || Google Summer of Code 2025&lt;br /&gt;
|-&lt;br /&gt;
| '''Contributions''' || [https://github.com/OSGeo/grass/pulls?q=is%3Apr+author%3ANishantBansal2003+ Pull Requests]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
During my GSoC project, I addressed the challenge that most GRASS tools produced only plain text output, forcing users to write custom parsing code for Python-based workflows. The task was to make these tools more data-science friendly by adding structured output formats. To achieve this, I extended the use of the Parson library to implement consistent JSON output across multiple modules, refined the JSON structure introduced in the previous GSoC, and added optional support for SHELL and CSV outputs where appropriate. I developed comprehensive Python test cases, ensured backward compatibility, and provided documentation with practical examples such as loading JSON into pandas. As a result, GRASS users can now directly consume structured outputs in modern workflows, reducing parsing overhead, improving interoperability, and paving the way for broader adoption of GRASS in data science contexts.&lt;br /&gt;
&lt;br /&gt;
== The state of integration BEFORE the start of GSoC ==&lt;br /&gt;
Before the start of GSoC, the integration of GRASS with data science workflows was limited due to several challenges. The JSON outputs introduced in the previous GSoC contained deeply nested hierarchies, making them difficult to use directly with libraries such as '''pandas''' or in broader data science pipelines. While some tools already supported JSON (e.g., &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;), many important and highly demanded modules lacked JSON support, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt; and many more. This lack of consistency limited the seamless adoption of GRASS in analytics and machine learning contexts. Moreover, there was no clear '''documentation of the JSON schema''' or guidance on how to parse and utilize these outputs effectively in '''python or pandas''', which made it difficult for users to understand the use cases and integrate GRASS outputs into modern data science workflows.&lt;br /&gt;
&lt;br /&gt;
== The state of integration AFTER GSoC ==&lt;br /&gt;
&lt;br /&gt;
After GSoC, the integration state of JSON and alternative output formats in GRASS has significantly improved. I refactored the JSON structures for tools such as &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;, and others, removing unnecessary nesting introduced during the previous GSoC. This makes their outputs much easier to consume directly in &amp;lt;b&amp;gt;Python&amp;lt;/b&amp;gt; or with &amp;lt;b&amp;gt;pandas&amp;lt;/b&amp;gt;. In addition, JSON support has been extended to many essential and frequently used modules, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;, and many more. I also added detailed documentation of the JSON schema and provided examples showing how to parse and use these outputs effectively with Python and pandas. Together, these improvements make the adoption of GRASS in modern &amp;lt;b&amp;gt;data science workflows&amp;lt;/b&amp;gt; far more seamless and accessible.&lt;br /&gt;
&lt;br /&gt;
=== Enhancements made per tool ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;: Simplified JSON structure for univariate statistics, removed unnecessary hierarchy, and added new output format options (CSV, shell).&lt;br /&gt;
* &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;: Added JSON support for querying raster map colors, with a Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;: Added JSON support for reporting the current mapset, with a Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;: Updated JSON structure for raster map metadata, removing hierarchy for easier parsing. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;: Simplified JSON output for geographic region boundaries, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;: Added JSON support for GRASS version information, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;: Added JSON support for listing imagery groups, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;: Added JSON and CSV support for raster area statistics, with Python and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;: Refined JSON schema for nearest element queries, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;: Added JSON support for listing GRASS database files, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;: Updated JSON schema for printing vector attribute values, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;: Simplified JSON output, added CSV support, and included a matplotlib example for profile visualization.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;: Updated JSON schema for linear regression between rasters, with Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;: Updated JSON schema for category quantiles, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;: Added JSON support for raster volume calculations, fixed missing headers in CSV output, and provided pandas examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.columns&amp;lt;/code&amp;gt;: Added JSON output for listing database table columns, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;: Added JSON output for measuring lengths and areas, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.connect&amp;lt;/code&amp;gt;: Added JSON output for DB connection info, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.multi&amp;lt;/code&amp;gt;: Added JSON output for multiple regression between rasters, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.db.connect&amp;lt;/code&amp;gt;: Added JSON output for vector map attribute connections, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.findfile&amp;lt;/code&amp;gt;: Added JSON output for GRASS database file search, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;: Added JSON output for 3D raster map info, with Python example. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;: Added JSON output for extracting raster values at vector points, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt;: Added JSON and CSV support for locating closest points between raster objects, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;: Added JSON and CSV support for attribute data, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;: Migrated from manually written JSON to Parson-based JSON output, simplified schema, and provided Python parsing examples.&lt;br /&gt;
&lt;br /&gt;
All these changes were accompanied by regression tests to ensure that new JSON/CSV/SHELL/PLAIN output options do not break existing functionality. Additionally, I introduced comprehensive Python test cases for these outputs, making the enhancements reliable and future-proof. During this work, I also fixed several bugs in modules such as &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;, strengthening the stability of GRASS as a whole.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
To sum up, I’m glad to have met the three core objectives of my project with the constant support of my mentors:&lt;br /&gt;
&lt;br /&gt;
* Brought JSON output to several important and long-requested modules, added regression tests, and ensured reliable future test coverage.&lt;br /&gt;
* Enhanced the JSON schema introduced in last year’s GSoC by reducing unnecessary hierarchy, making it more consistent across tools, and providing Python/Pandas examples for practical use.&lt;br /&gt;
* Expanded &amp;lt;b&amp;gt;CSV&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;SHELL&amp;lt;/b&amp;gt; output formats to additional tools where they could bring value.&lt;br /&gt;
&lt;br /&gt;
This journey has been both rewarding and educational, and I’m grateful for the opportunity to contribute to GRASS through GSoC 2025. I especially want to thank &amp;lt;b&amp;gt;Anna Petrasova&amp;lt;/b&amp;gt; and the GRASS Development Team for their guidance and support. I’m excited to keep building on this work and further extend JSON and other features in the future.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
There is significant scope to extend structured output support across GRASS tools. In particular, future efforts should focus on:&lt;br /&gt;
* Expanding JSON output to additional modules, with details tracked here: [https://github.com/orgs/OSGeo/projects/10 GRASS JSON Outputs Project].&lt;br /&gt;
* Refining and standardizing the JSON schema to better support complex workflows and integrations.&lt;br /&gt;
* Exploring and implementing other output formats (e.g., SHELL, CSV, PLAIN) where they can improve usability and automation.&lt;br /&gt;
I also plan to continue contributing to GRASS by extending JSON support to more modules and engaging in community discussions around schema design and format integration.&lt;br /&gt;
&lt;br /&gt;
== Log of Pull Requests ==&lt;br /&gt;
Below is a list of pull requests submitted to the GRASS repository during GSoC 2025:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pull Request !! Description  !! Date   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5688 #5688] || r.univar: Fix JSON structure || May 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5773 #5773] || r.what.color: Add test file || May 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5775 #5775] || g.mapset: Add test file || May 26, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5784 #5784] || r.info: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;Closed&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5785 #5785] || g.region: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5810 #5810] || g.mapset: Add JSON support || June 2, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5821 #5821] || r.univar: Fix uninitialized zone_value || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5822 #5822] || r.what.color: Add JSON support || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5842 #5842] || r.info: Update test file || June 5, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5859 #5859] || r.info: Improve interface || June 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5863 #5863] || g.version: Add JSON support || June 9, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5870 #5870] || i.group: Add JSON support || June 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5879 #5879] || r.stats: Add test file || June 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5892 #5892] || r.stats: Add tests for JSON output || June 14, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5898 #5898] || v.distance: Update JSON format || June 16, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5900 #5900] || r.stats: fix uninitialised window value || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5906 #5906] || g.list: Add test file || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5921 #5921] || g.list: Add JSON support || June 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5929 #5929] || g.region: Update JSON format || June 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5946 #5946] || v.to.db: Update JSON format || June 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5962 #5962] || r.profile: Update JSON format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5966 #5966] || r.univar: Add shell and CSV format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5990 #5990] || r.regression.line: Add test file || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5993 #5993] || r.regression.line: Add JSON support || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6002 #6002] || r.stats.quantile: Add test file || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6007 #6007] || r.stats.quantile: Add JSON support || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6027 #6027] || r.volume: Add test file || July 4, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6036 #6036] || r.volume: Add JSON support || July 6, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6042 #6042] || db.columns: Add JSON support || July 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6051 #6051] || m.measure: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6052 #6052] || db.connect: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6053 #6053] || m.measure: Add JSON support || July 11, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6059 #6059] || db.connect: Add JSON support || July 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6066 #6066] || r.regression.multi: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6067 #6067] || v.db.connect: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6075 #6075] || r.regression.multi: Add JSON support || July 18, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6077 #6077] || v.db.connect: Add JSON support || July 19, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6091 #6091] || g.findfile: Add JSON support || July 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6098 #6098] || r3.info: Add test file || July 22, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6103 #6103] || r3.info: Add JSON support || July 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6109 #6109] || v.what.rast: Add test file || July 24, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6132 #6132] || v.category: Use CSV format instead of shell format || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6133 #6133] || r.stats: add CSV support || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6134 #6134] || r.volume: add csv column headers || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6140 #6140] || v.what.rast: Add JSON support || July 29, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6145 #6145] || r.profile: Add CSV support || July 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6150 #6150] || r.distance: Update existing test cases || August 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6204 #6204] || r.distance: Add JSON and CSV support || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6205 #6205] || v.class: Add more test cases and fix out-of-bounds bug || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6210 #6210] || v.class: Add JSON and CSV support || August 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6252 #6252] || v.what: Update JSON output format || August 23, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Additional Links ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Ttile&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| OSGeo Wiki Page&lt;br /&gt;
| [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C Add JSON output to different tools in C for GRASS]&lt;br /&gt;
|-&lt;br /&gt;
| Github Fork&lt;br /&gt;
| [https://github.com/NishantBansal2003/grass GitHub Fork]&lt;br /&gt;
|-&lt;br /&gt;
| GSoC Page&lt;br /&gt;
| [https://summerofcode.withgoogle.com/programs/2025/projects/GPVGd3DH Link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples &amp;amp; Images ==&lt;br /&gt;
Below is a list of some of the tasks I completed during my GSoC. Please note that this is not a complete list. For more details on these and other tools, please check out the GRASS documentation from the PR links provided above.&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; JSON output in Python ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; can be directly loaded into a pandas DataFrame and used for plotting with matplotlib.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
# Run r.profile command&lt;br /&gt;
elevation = gs.read_command(&lt;br /&gt;
    &amp;quot;r.profile&amp;quot;,&lt;br /&gt;
    input=&amp;quot;elevation&amp;quot;,&lt;br /&gt;
    coordinates=&amp;quot;641712,226095,641546,224138,641546,222048,641049,221186&amp;quot;,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
    flags=&amp;quot;gc&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Load the JSON data into a dataframe&lt;br /&gt;
df = pd.read_json(elevation)&lt;br /&gt;
print(df)&lt;br /&gt;
&lt;br /&gt;
# Create the scatter plot&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
plt.scatter(df[&amp;quot;distance&amp;quot;], df[&amp;quot;value&amp;quot;], c=df[&amp;quot;color&amp;quot;], marker=&amp;quot;o&amp;quot;)&lt;br /&gt;
plt.title(&amp;quot;Profile of Distance vs. Elevation with Color Coding&amp;quot;)&lt;br /&gt;
plt.xlabel(&amp;quot;Distance (meters)&amp;quot;)&lt;br /&gt;
plt.ylabel(&amp;quot;Elevation&amp;quot;)&lt;br /&gt;
plt.grid(True)&lt;br /&gt;
plt.show()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame Output (first 10 rows) ====  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
         easting       northing   distance      value    color&lt;br /&gt;
0  641712.000000  226095.000000   0.000000  84.661507  #71FF00&lt;br /&gt;
1  641711.154826  226085.036106   9.999675  84.511765  #6FFF00&lt;br /&gt;
2  641710.309651  226075.072213  19.999349  84.241806  #6BFF00&lt;br /&gt;
3  641709.464477  226065.108319  29.999024  84.304214  #6CFF00&lt;br /&gt;
4  641708.619302  226055.144426  39.998699  84.174400  #6AFF00&lt;br /&gt;
5  641707.774128  226045.180532  49.998374  84.112534  #6AFF00&lt;br /&gt;
6  641706.928954  226035.216639  59.998048  84.011208  #68FF00&lt;br /&gt;
7  641706.083779  226025.252745  69.997723  83.834084  #66FF00&lt;br /&gt;
8  641705.238605  226015.288851  79.997398  83.870193  #67FF00&lt;br /&gt;
9  641704.393430  226005.324958  89.997073  84.194908  #6BFF00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Visualization ====  &lt;br /&gt;
&lt;br /&gt;
Matplotlib scatter plot generated from the &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; JSON output: &lt;br /&gt;
&lt;br /&gt;
[[File:R profile plot.png]]&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt; can be directly loaded into a pandas DataFrame.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.class&amp;quot;,&lt;br /&gt;
    map=&amp;quot;bridges&amp;quot;,&lt;br /&gt;
    column=&amp;quot;YEAR_BUILT&amp;quot;,&lt;br /&gt;
    algorithm=&amp;quot;std&amp;quot;,&lt;br /&gt;
    nbclasses=5,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data[&amp;quot;intervals&amp;quot;])&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output (intervals) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
          from           to  frequency&lt;br /&gt;
0  1891.000000  1938.829689        750&lt;br /&gt;
1  1938.829689  1954.722836       1841&lt;br /&gt;
2  1954.722836  1970.615983       5556&lt;br /&gt;
3  1970.615983  1986.509130       1788&lt;br /&gt;
4  1986.509130  1997.000000       1003&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame to display categories and values.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.what.rast&amp;quot;, map=&amp;quot;bridges&amp;quot;, raster=&amp;quot;elevation&amp;quot;, flags=&amp;quot;p&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    category       value&lt;br /&gt;
0       4635   86.851212&lt;br /&gt;
1       4648   87.883255&lt;br /&gt;
2       4688  103.382004&lt;br /&gt;
3       4709   67.387856&lt;br /&gt;
4       4986   90.972832&lt;br /&gt;
5       4991   86.550629&lt;br /&gt;
6       5027   84.256355&lt;br /&gt;
7       5060   79.500443&lt;br /&gt;
8       5071   78.732864&lt;br /&gt;
9       5089   85.703636&lt;br /&gt;
10      5096  115.967323&lt;br /&gt;
11      5130   81.055870&lt;br /&gt;
12      5150   92.812927&lt;br /&gt;
13      5166   88.149483&lt;br /&gt;
14      5184   76.426331&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test Suite Update ====&lt;br /&gt;
Added 6 tests to the test suite, including both regression tests and future-proof tests to ensure functionality remains reliable in future updates.&lt;br /&gt;
&lt;br /&gt;
[[File:V what rast test file.png|700px]]&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame to locate closest points.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
&lt;br /&gt;
result = gs.parse_command(&lt;br /&gt;
    &amp;quot;r.distance&amp;quot;, map=[&amp;quot;zipcodes&amp;quot;, &amp;quot;lakes&amp;quot;], flags=&amp;quot;l&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
df = pd.json_normalize(result)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output (first 10 rows, truncated) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
       distance  from_cell.category  from_cell.easting  ...  to_cell.easting to_cell.northing  to_cell.label&lt;br /&gt;
0  11158.507466               27511      632604.951740  ...    640584.676990    215499.220687       Dam/Weir&lt;br /&gt;
1   1037.271198               27511      631734.981693  ...    632314.961724    221839.026534      Lake/Pond&lt;br /&gt;
2   2276.988836               27511      630015.040913  ...    630765.015090    219459.099418      Reservoir&lt;br /&gt;
3  14614.155031               27513      631055.005106  ...    640584.676990    215499.220687       Dam/Weir&lt;br /&gt;
4   3635.876453               27513      631674.983759  ...    635164.863600    227198.862392      Lake/Pond&lt;br /&gt;
5   6971.335517               27513      630005.041257  ...    630765.015090    219459.099418      Reservoir&lt;br /&gt;
6   8978.927486               27518      632134.967922  ...    640424.682499    215209.229568       Dam/Weir&lt;br /&gt;
7      0.000000               27518      630005.041257  ...    630005.041257    220199.076757      Lake/Pond&lt;br /&gt;
8    699.975899               27518      630005.041257  ...    630705.017156    219379.101868      Reservoir&lt;br /&gt;
9    509.197766               27529      641154.657366  ...    640674.673892    215249.228343       Dam/Weir&lt;br /&gt;
&lt;br /&gt;
[10 rows x 9 columns]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.distance&amp;quot;,&lt;br /&gt;
    flags=&amp;quot;p&amp;quot;,&lt;br /&gt;
    from_=&amp;quot;busroute_a&amp;quot;,&lt;br /&gt;
    to=&amp;quot;busstopsall&amp;quot;,&lt;br /&gt;
    upload=&amp;quot;dist,to_attr&amp;quot;,&lt;br /&gt;
    to_column=&amp;quot;routes&amp;quot;,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
   from_cat  to_cat      dist to_attr&lt;br /&gt;
0         1     112  0.142812     8,A&lt;br /&gt;
1         2      44  0.102327     9,A&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;r.volume&amp;quot;, input=&amp;quot;elevation&amp;quot;, clump=&amp;quot;geology_30m&amp;quot;, flags=&amp;quot;p&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    category  average         sum   cells        volume  easting  northing&lt;br /&gt;
0        217   118.93 86288827.99  725562 8628882798.63   635325    221535&lt;br /&gt;
1        262   108.97 21650560.37  198684 2165056037.02   638935    222495&lt;br /&gt;
2        270    92.23 63578874.44  689373 6357887443.53   642405    221485&lt;br /&gt;
3        405   132.96 33732662.09  253710 3373266208.59   631835    224095&lt;br /&gt;
4        583   139.35  3011288.22   21609  301128821.55   630205    224665&lt;br /&gt;
5        720   124.30   599618.16    4824   59961816.06   634075    227995&lt;br /&gt;
6        766   132.43   936791.20    7074   93679120.08   631425    227845&lt;br /&gt;
7        862   118.31  7302317.47   61722  730231746.74   630505    218885&lt;br /&gt;
8        910    94.20  4235816.13   44964  423581613.11   639215    216365&lt;br /&gt;
9        921   135.22  1693985.23   12528  169398523.05   630755    215445&lt;br /&gt;
10       945   127.24     1145.12       9     114512.03   630015    215015&lt;br /&gt;
11       946    89.91   365748.34    4068   36574833.85   639085    215255&lt;br /&gt;
12       948   129.02   112631.82     873   11263181.57   630185    215115&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test Suite Update ====&lt;br /&gt;
&lt;br /&gt;
Added 4 tests to the test suite, including both regression tests and future-proof tests to ensure functionality remains reliable in future updates.&lt;br /&gt;
&lt;br /&gt;
[[File:Test cmd 2.png|600px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Test cmd output 2.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{GSoC}}&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28688</id>
		<title>GRASS GSoC 2025 Add JSON output to different tools in C</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28688"/>
		<updated>2025-08-24T08:07:02Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: /* Examples &amp;amp; Images */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Nishant Bansal&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo - Open Source Geospatial Foundation]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/NishantBansal2003/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''GSoC proposal''' || [https://docs.google.com/document/d/1ZPQ9RXU7b_RUDmBmAMeK7ZjFAV1WC7Urd1Zlz678jyw/edit?tab=t.0#heading=h.z6ne0og04bp5 View Proposal]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Abstract =&lt;br /&gt;
Currently, most GRASS tools produce data in plain text by default. This means that users who want to process the output in Python need to create custom parsing code. To make this easier, several modules could be improved by oﬀering JSON as an alternative output format. Recently, the Parson library was added to the GRASS codebase to support JSON output in addition to plain text. Building on the advancements made during the last GSoC, my project aims to expand JSON output capabilities to more tools using the Parson library. I will also work on making the JSON structure introduced in the previous GSoC more useful and consistent. Additionally, I plan to add support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
&lt;br /&gt;
# Working with mentors to finalize the structure of the JSON output.&lt;br /&gt;
# Adding an option to choose the output format (plain text or JSON) for each updated tool.&lt;br /&gt;
# Make the JSON structure introduced during the last GSoC more useful and consistent across tools.&lt;br /&gt;
# Developing Python test cases to ensure that the JSON output works correctly and to avoid future issues.&lt;br /&gt;
# Providing basic documentation and example JSON outputs for each modified tool.&lt;br /&gt;
# Adding support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
# Develop simple examples demonstrating how to use JSON output in a data science workflow, such as reading JSON data into pandas or python.&lt;br /&gt;
&lt;br /&gt;
= Timeline =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Period !! Timeline  !! Tasks   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period &lt;br /&gt;
||&lt;br /&gt;
May 8 - June 1  &lt;br /&gt;
|| &lt;br /&gt;
# Reviewed the work done during the last GSoC to stabilize the JSON output.&lt;br /&gt;
# Discussed the priority tools for adding JSON support.&lt;br /&gt;
# Read GRASS documentation to add Python and JSON examples to the documentation.&lt;br /&gt;
|| &lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;13&amp;quot; | Official Coding Period &lt;br /&gt;
|-&lt;br /&gt;
| '''Week 1''' (June 2 - June 8) || &lt;br /&gt;
# Add JSON support for g.mapset [https://github.com/OSGeo/grass/pull/5810 #5810]&lt;br /&gt;
# Fix uninitialized zone_value in r.univar [https://github.com/OSGeo/grass/pull/5821 #5821]&lt;br /&gt;
# Add JSON support for r.what.color [https://github.com/OSGeo/grass/pull/5822 #5822]&lt;br /&gt;
# Update test file in r.info [https://github.com/OSGeo/grass/pull/5842 #5842]&lt;br /&gt;
# Improve interface for r.info [https://github.com/OSGeo/grass/pull/5859 #5859]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 2''' (June 9 - June 15) ||&lt;br /&gt;
# Add JSON support for g.version [https://github.com/OSGeo/grass/pull/5863 #5863]&lt;br /&gt;
# Add JSON support for i.group [https://github.com/OSGeo/grass/pull/5870 #5870]&lt;br /&gt;
# Add test file in r.stats [https://github.com/OSGeo/grass/pull/5879 #5879]&lt;br /&gt;
# Add tests for JSON output in r.stats [https://github.com/OSGeo/grass/pull/5892 #5892]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 3''' (June 16 - June 22) ||&lt;br /&gt;
# Update the JSON output schema of v.distance [https://github.com/OSGeo/grass/pull/5898 #5898]&lt;br /&gt;
# Fix uninitialized window variable in r.stats [https://github.com/OSGeo/grass/pull/5900 #5900]&lt;br /&gt;
# Add test file in g.list [https://github.com/OSGeo/grass/pull/5906 #5906]&lt;br /&gt;
# Add JSON support for g.list [https://github.com/OSGeo/grass/pull/5921 #5921]&lt;br /&gt;
# Update the JSON output schema of g.region [https://github.com/OSGeo/grass/pull/5929 #5929]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 4''' (June 23 - June 29) ||&lt;br /&gt;
# Update the JSON output schema of v.to.db [https://github.com/OSGeo/grass/pull/5946 #5946]&lt;br /&gt;
# Update the JSON output schema of r.profile [https://github.com/OSGeo/grass/pull/5962 #5962]&lt;br /&gt;
# Add SHELL and CSV output support for r.univar [https://github.com/OSGeo/grass/pull/5966 #5966]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 5''' (June 30 - July 6) ||&lt;br /&gt;
# Add test file in r.regression.line [https://github.com/OSGeo/grass/pull/5990 #5990]&lt;br /&gt;
# Add JSON support for r.regression.line [https://github.com/OSGeo/grass/pull/5993 #5993]&lt;br /&gt;
# Add test file in r.stats.quantile [https://github.com/OSGeo/grass/pull/6002 #6002]&lt;br /&gt;
# Add JSON support for r.stats.quantile [https://github.com/OSGeo/grass/pull/6007 #6007]&lt;br /&gt;
# Add test file in r.volume [https://github.com/OSGeo/grass/pull/6027 #6027]&lt;br /&gt;
# Add JSON support for r.volume [https://github.com/OSGeo/grass/pull/6036 #6036]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 6''' (July 7 - July 13) ||&lt;br /&gt;
# Add JSON support for db.columns [https://github.com/OSGeo/grass/pull/6042 #6042]&lt;br /&gt;
# Add test file in m.measure [https://github.com/OSGeo/grass/pull/6051 #6051]&lt;br /&gt;
# Add test file in db.connect [https://github.com/OSGeo/grass/pull/6052 #6052]&lt;br /&gt;
# Add JSON support for m.measure [https://github.com/OSGeo/grass/pull/6053 #6053]&lt;br /&gt;
# Add JSON support for db.connect [https://github.com/OSGeo/grass/pull/6059 #6059]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | '''Week 7''' (July 14 - July 20) ||&lt;br /&gt;
# Add test file in r.regression.multi [https://github.com/OSGeo/grass/pull/6066 #6066]&lt;br /&gt;
# Add test file in v.db.connect [https://github.com/OSGeo/grass/pull/6067 #6067]&lt;br /&gt;
# Add JSON support for r.regression.multi [https://github.com/OSGeo/grass/pull/6075 #6075]&lt;br /&gt;
# Add JSON support for v.db.connect [https://github.com/OSGeo/grass/pull/6077 #6077]&lt;br /&gt;
# Submit MidTerm evaluation.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 8''' (July 21 - July 27) ||&lt;br /&gt;
# Add JSON support for g.findfile [https://github.com/OSGeo/grass/pull/6091 #6091]&lt;br /&gt;
# Add test file in r3.info [https://github.com/OSGeo/grass/pull/6098 #6098]&lt;br /&gt;
# Add JSON support for r3.info [https://github.com/OSGeo/grass/pull/6103 #6103]&lt;br /&gt;
# Add test file in v.what.rast [https://github.com/OSGeo/grass/pull/6109 #6109]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 9''' (July 28 - August 3) ||&lt;br /&gt;
# Update format to CSV instead of shell in v.category [https://github.com/OSGeo/grass/pull/6132 #6132]&lt;br /&gt;
# Add CSV output support to r.stats [https://github.com/OSGeo/grass/pull/6133 #6133]&lt;br /&gt;
# Add CSV headers to r.volume [https://github.com/OSGeo/grass/pull/6134 #6134]&lt;br /&gt;
# Add JSON support for v.what.rast [https://github.com/OSGeo/grass/pull/6140 #6140]&lt;br /&gt;
# Add CSV output support to r.profile [https://github.com/OSGeo/grass/pull/6145 #6145]&lt;br /&gt;
# Update test cases in r.distance [https://github.com/OSGeo/grass/pull/6150 #6150]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 10''' (August 4 - August 10) ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 11''' (August 11 - August 17) ||&lt;br /&gt;
# Add JSON and CSV support for r.distance [https://github.com/OSGeo/grass/pull/6204 #6204]&lt;br /&gt;
# Add more test cases in v.class [https://github.com/OSGeo/grass/pull/6205 #6205]&lt;br /&gt;
# Add JSON and CSV support for v.class [https://github.com/OSGeo/grass/pull/6210 #6210]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 12''' (August 18 - August 24) ||&lt;br /&gt;
# Update JSON output format for v.what [https://github.com/OSGeo/grass/pull/6252 #6252]&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Evaluation Period &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | August 25 - September 1 ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
# Submit code, final evaluation and write the final GSoC report.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Reports =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* Introduced myself on the [https://discourse.osgeo.org/t/gsoc-2025-introduction-nishant-bansal/147005 OSGeo Discourse mailing list].&lt;br /&gt;
* Created both my [https://wiki.osgeo.org/wiki/User:Nishantbansal2003 personal Wiki page] and the [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C project Wiki page], adding all necessary project-related information.&lt;br /&gt;
* Read GRASS documentation to support the addition of Python and JSON examples.&lt;br /&gt;
* Worked on the following pull requests:&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5688 #5688]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5773 #5773]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5775 #5775]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5784 #5784]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5785 #5785]&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to the g.mapset and r.what.color modules.&lt;br /&gt;
* If time permits, I will begin improving the r.info interface: [https://github.com/OSGeo/grass/issues/5793 Issue #5793]&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
'''Project Discussions and Meetings'''&lt;br /&gt;
* '''14 May 2025''': Introductory meeting discussing JSON support and overall project milestones.&lt;br /&gt;
* '''21 May 2025''': Introduction with fellow developers. Discussed priority tools, adding Python/Pandas examples, and approaches for finalizing the JSON schema for each module.&lt;br /&gt;
&lt;br /&gt;
== Week-1 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.mapset''': Added JSON output support, now you can use -p and -l flags to get JSON-formatted results.&lt;br /&gt;
* '''r.univar''': Fixed a bug causing an uninitialized zone_value.&lt;br /&gt;
* '''r.what.color''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5822 #5822])&lt;br /&gt;
* '''r.info (regression tests)''': To maintain backward compatibility while updating its interface, I added strong regression tests.&lt;br /&gt;
* '''r.info (interface improvements)''': Began improving the module’s interface. (See PR [https://github.com/OSGeo/grass/pull/5859 #5859])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.version (see issue [https://github.com/OSGeo/grass/issues/5816 #5816]).&lt;br /&gt;
* Add JSON output support to i.group (see issue [https://github.com/OSGeo/grass/issues/5815 #5815]).&lt;br /&gt;
* If time permits, write tests for r.stats (see issue [https://github.com/OSGeo/grass/issues/5814 #5814]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-2 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.version''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5863 #5863])&lt;br /&gt;
* '''i.group''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5870 #5870])&lt;br /&gt;
* '''r.stats (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats''': Added tests for JSON output; this uncovered a bug, which was fixed alongside.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.distance (see issue [https://github.com/OSGeo/grass/issues/5846 #5846]).&lt;br /&gt;
* Add JSON output support to g.list (see issue [https://github.com/OSGeo/grass/issues/5848 #5848]).&lt;br /&gt;
* If time permits, fix the JSON output format of g.region (see issue [https://github.com/OSGeo/grass/issues/5828 #5828]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-3 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.distance''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5898 #5898])&lt;br /&gt;
* '''r.stats''': Fixed a bug causing an uninitialized &amp;lt;code&amp;gt;window&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
* '''g.list (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''g.list''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5921 #5921])&lt;br /&gt;
* '''g.region''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5929 #5929])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.to.db (see issue [https://github.com/OSGeo/grass/pull/5711 #5711]).&lt;br /&gt;
* Update JSON output format and documentation of r.profile (see issue [https://github.com/OSGeo/grass/pull/5834 #5834]).&lt;br /&gt;
* If time permits, add shell and csv output formats to r.univar (see issue [https://github.com/OSGeo/grass/pull/5824 #5824]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-4 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.to.db''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5946 #5946])&lt;br /&gt;
* '''r.profile''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5962 #5962])&lt;br /&gt;
* '''r.univar''': Implemented SHELL and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/5966 #5966])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.regression.line (see issue [https://github.com/OSGeo/grass/pull/5950 #5950]).&lt;br /&gt;
* Add JSON output support to r.stats.quantile (see issue [https://github.com/OSGeo/grass/pull/5951 #5951]).&lt;br /&gt;
* Add JSON output support to r.volume (see issue [https://github.com/OSGeo/grass/pull/5949 #5949]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-5 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.line (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.line''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5993 #5993])&lt;br /&gt;
* '''r.stats.quantile (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats.quantile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6007 #6007])&lt;br /&gt;
* '''r.volume (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.volume''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6036 #6036])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to m.measure (see issue [https://github.com/OSGeo/grass/pull/6006 #6006]).&lt;br /&gt;
* Add JSON output support to db.columns (see issue [https://github.com/OSGeo/grass/pull/6008 #6008]).&lt;br /&gt;
* Add JSON output support to db.connect (see issue [https://github.com/OSGeo/grass/pull/6009 #6009]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-6 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''db.columns''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6042 #6042])&lt;br /&gt;
* '''m.measure (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''m.measure''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6053 #6053])&lt;br /&gt;
* '''db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6059 #6059])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to v.db.connect (see issue [https://github.com/OSGeo/grass/pull/6014 #6014]).&lt;br /&gt;
* Add JSON output support to r.regression.multi (see issue [https://github.com/OSGeo/grass/pull/6010 #6010]).&lt;br /&gt;
* If time permits, add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* If time permits, add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-7 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.multi (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''v.db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.multi''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6075 #6075])&lt;br /&gt;
* '''v.db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6077 #6077])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* Add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
* If time permits, add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-8 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.findfile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6091 #6091])&lt;br /&gt;
* '''r3.info (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a flag-handling bug.&lt;br /&gt;
* '''r3.info''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6103 #6103])&lt;br /&gt;
* '''v.what.rast (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a sorting bug.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
* Update format to CSV instead of shell in v.category (see issue [https://github.com/OSGeo/grass/pull/6025 #6025]).&lt;br /&gt;
* Add CSV output support to r.stats (see issue [https://github.com/OSGeo/grass/issues/5835 #5835]).&lt;br /&gt;
* If time permits, add CSV output support to r.profile (see issue [https://github.com/OSGeo/grass/issues/5958 #5958]).&lt;br /&gt;
* If time permits, add CSV headers to r.volume (see issue [https://github.com/OSGeo/grass/issues/6049 #6049]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I don’t have any blockers this week. However, I’ll be a little busy with some personal work from August 3 to August 10, so I’ll try to complete next week’s tasks this week itself.&lt;br /&gt;
&lt;br /&gt;
== Week-9 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.category''': Updated format to CSV instead of shell. (See PR [https://github.com/OSGeo/grass/pull/6132 #6132])&lt;br /&gt;
* '''r.stats''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6133 #6133])&lt;br /&gt;
* '''r.volume''': Implemented CSV column headers support. (See PR [https://github.com/OSGeo/grass/pull/6134 #6134])&lt;br /&gt;
* '''v.what.rast''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6140 #6140])&lt;br /&gt;
* '''r.profile''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6145 #6145])&lt;br /&gt;
* '''r.distance (regression tests)''': Updated regression tests to ensure backward compatibility with new JSON support. (See PR [https://github.com/OSGeo/grass/pull/6150 #6150])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* I’ll be a bit busy with some personal work from August 3 to 10, so I completed next week’s tasks last week itself. I’ve already informed my mentors about my limited availability.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* Yes, I’ll be a bit busy with some personal work from August 3 to 10.&lt;br /&gt;
&lt;br /&gt;
== Week-10 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* This week I was busy with some personal work, so I did not complete any additional tasks. However, I had already finished this week’s tasks last week. This week, I mostly focused on handling reviews for those PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.distance (see issue [https://github.com/OSGeo/grass/issues/6135 #6135]).&lt;br /&gt;
* Add JSON output support to v.class (see issue [https://github.com/OSGeo/grass/issues/6136 #6136]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-11 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.distance''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6204 #6204])&lt;br /&gt;
* '''v.class''': Updated regression tests to ensure backward compatibility with new JSON support and fixed a out-of-bounds bug. (See PR [https://github.com/OSGeo/grass/pull/6205 #6205])&lt;br /&gt;
* '''v.class''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6210 #6210])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Discuss next week’s tasks with my mentors, if no issues are assigned, I’ll identify tools that currently lack JSON support and evaluate which ones are feasible to add it to.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-12 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.what''': Update JSON output format. (See PR [https://github.com/OSGeo/grass/pull/6252 #6252])&lt;br /&gt;
* Addressed review comments on my open PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
= Final Report =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Title''' || Add JSON output to different tools in C for GRASS&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo (Open Source Geospatial Foundation)]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''Program''' || Google Summer of Code 2025&lt;br /&gt;
|-&lt;br /&gt;
| '''Contributions''' || [https://github.com/OSGeo/grass/pulls?q=is%3Apr+author%3ANishantBansal2003+ Pull Requests]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
During my GSoC project, I addressed the challenge that most GRASS tools produced only plain text output, forcing users to write custom parsing code for Python-based workflows. The task was to make these tools more data-science friendly by adding structured output formats. To achieve this, I extended the use of the Parson library to implement consistent JSON output across multiple modules, refined the JSON structure introduced in the previous GSoC, and added optional support for SHELL and CSV outputs where appropriate. I developed comprehensive Python test cases, ensured backward compatibility, and provided documentation with practical examples such as loading JSON into pandas. As a result, GRASS users can now directly consume structured outputs in modern workflows, reducing parsing overhead, improving interoperability, and paving the way for broader adoption of GRASS in data science contexts.&lt;br /&gt;
&lt;br /&gt;
== The state of integration BEFORE the start of GSoC ==&lt;br /&gt;
Before the start of GSoC, the integration of GRASS with data science workflows was limited due to several challenges. The JSON outputs introduced in the previous GSoC contained deeply nested hierarchies, making them difficult to use directly with libraries such as '''pandas''' or in broader data science pipelines. While some tools already supported JSON (e.g., &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;), many important and highly demanded modules lacked JSON support, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt; and many more. This lack of consistency limited the seamless adoption of GRASS in analytics and machine learning contexts. Moreover, there was no clear '''documentation of the JSON schema''' or guidance on how to parse and utilize these outputs effectively in '''python or pandas''', which made it difficult for users to understand the use cases and integrate GRASS outputs into modern data science workflows.&lt;br /&gt;
&lt;br /&gt;
== The state of integration AFTER GSoC ==&lt;br /&gt;
&lt;br /&gt;
After GSoC, the integration state of JSON and alternative output formats in GRASS has significantly improved. I refactored the JSON structures for tools such as &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;, and others, removing unnecessary nesting introduced during the previous GSoC. This makes their outputs much easier to consume directly in &amp;lt;b&amp;gt;Python&amp;lt;/b&amp;gt; or with &amp;lt;b&amp;gt;pandas&amp;lt;/b&amp;gt;. In addition, JSON support has been extended to many essential and frequently used modules, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;, and many more. I also added detailed documentation of the JSON schema and provided examples showing how to parse and use these outputs effectively with Python and pandas. Together, these improvements make the adoption of GRASS in modern &amp;lt;b&amp;gt;data science workflows&amp;lt;/b&amp;gt; far more seamless and accessible.&lt;br /&gt;
&lt;br /&gt;
=== Enhancements made per tool ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;: Simplified JSON structure for univariate statistics, removed unnecessary hierarchy, and added new output format options (CSV, shell).&lt;br /&gt;
* &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;: Added JSON support for querying raster map colors, with a Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;: Added JSON support for reporting the current mapset, with a Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;: Updated JSON structure for raster map metadata, removing hierarchy for easier parsing. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;: Simplified JSON output for geographic region boundaries, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;: Added JSON support for GRASS version information, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;: Added JSON support for listing imagery groups, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;: Added JSON and CSV support for raster area statistics, with Python and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;: Refined JSON schema for nearest element queries, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;: Added JSON support for listing GRASS database files, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;: Updated JSON schema for printing vector attribute values, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;: Simplified JSON output, added CSV support, and included a matplotlib example for profile visualization.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;: Updated JSON schema for linear regression between rasters, with Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;: Updated JSON schema for category quantiles, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;: Added JSON support for raster volume calculations, fixed missing headers in CSV output, and provided pandas examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.columns&amp;lt;/code&amp;gt;: Added JSON output for listing database table columns, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;: Added JSON output for measuring lengths and areas, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.connect&amp;lt;/code&amp;gt;: Added JSON output for DB connection info, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.multi&amp;lt;/code&amp;gt;: Added JSON output for multiple regression between rasters, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.db.connect&amp;lt;/code&amp;gt;: Added JSON output for vector map attribute connections, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.findfile&amp;lt;/code&amp;gt;: Added JSON output for GRASS database file search, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;: Added JSON output for 3D raster map info, with Python example. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;: Added JSON output for extracting raster values at vector points, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt;: Added JSON and CSV support for locating closest points between raster objects, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;: Added JSON and CSV support for attribute data, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;: Migrated from manually written JSON to Parson-based JSON output, simplified schema, and provided Python parsing examples.&lt;br /&gt;
&lt;br /&gt;
All these changes were accompanied by regression tests to ensure that new JSON/CSV/SHELL/PLAIN output options do not break existing functionality. Additionally, I introduced comprehensive Python test cases for these outputs, making the enhancements reliable and future-proof. During this work, I also fixed several bugs in modules such as &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;, strengthening the stability of GRASS as a whole.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
To sum up, I’m glad to have met the three core objectives of my project with the constant support of my mentors:&lt;br /&gt;
&lt;br /&gt;
* Brought JSON output to several important and long-requested modules, added regression tests, and ensured reliable future test coverage.&lt;br /&gt;
* Enhanced the JSON schema introduced in last year’s GSoC by reducing unnecessary hierarchy, making it more consistent across tools, and providing Python/Pandas examples for practical use.&lt;br /&gt;
* Expanded &amp;lt;b&amp;gt;CSV&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;SHELL&amp;lt;/b&amp;gt; output formats to additional tools where they could bring value.&lt;br /&gt;
&lt;br /&gt;
This journey has been both rewarding and educational, and I’m grateful for the opportunity to contribute to GRASS through GSoC 2025. I especially want to thank &amp;lt;b&amp;gt;Anna Petrasova&amp;lt;/b&amp;gt; and the GRASS Development Team for their guidance and support. I’m excited to keep building on this work and further extend JSON and other features in the future.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
There is significant scope to extend structured output support across GRASS tools. In particular, future efforts should focus on:&lt;br /&gt;
* Expanding JSON output to additional modules, with details tracked here: [https://github.com/orgs/OSGeo/projects/10 GRASS JSON Outputs Project].&lt;br /&gt;
* Refining and standardizing the JSON schema to better support complex workflows and integrations.&lt;br /&gt;
* Exploring and implementing other output formats (e.g., SHELL, CSV, PLAIN) where they can improve usability and automation.&lt;br /&gt;
I also plan to continue contributing to GRASS by extending JSON support to more modules and engaging in community discussions around schema design and format integration.&lt;br /&gt;
&lt;br /&gt;
== Log of Pull Requests ==&lt;br /&gt;
Below is a list of pull requests submitted to the GRASS repository during GSoC 2025:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pull Request !! Description  !! Date   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5688 #5688] || r.univar: Fix JSON structure || May 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5773 #5773] || r.what.color: Add test file || May 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5775 #5775] || g.mapset: Add test file || May 26, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5784 #5784] || r.info: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;Closed&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5785 #5785] || g.region: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5810 #5810] || g.mapset: Add JSON support || June 2, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5821 #5821] || r.univar: Fix uninitialized zone_value || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5822 #5822] || r.what.color: Add JSON support || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5842 #5842] || r.info: Update test file || June 5, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5859 #5859] || r.info: Improve interface || June 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5863 #5863] || g.version: Add JSON support || June 9, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5870 #5870] || i.group: Add JSON support || June 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5879 #5879] || r.stats: Add test file || June 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5892 #5892] || r.stats: Add tests for JSON output || June 14, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5898 #5898] || v.distance: Update JSON format || June 16, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5900 #5900] || r.stats: fix uninitialised window value || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5906 #5906] || g.list: Add test file || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5921 #5921] || g.list: Add JSON support || June 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5929 #5929] || g.region: Update JSON format || June 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5946 #5946] || v.to.db: Update JSON format || June 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5962 #5962] || r.profile: Update JSON format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5966 #5966] || r.univar: Add shell and CSV format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5990 #5990] || r.regression.line: Add test file || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5993 #5993] || r.regression.line: Add JSON support || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6002 #6002] || r.stats.quantile: Add test file || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6007 #6007] || r.stats.quantile: Add JSON support || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6027 #6027] || r.volume: Add test file || July 4, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6036 #6036] || r.volume: Add JSON support || July 6, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6042 #6042] || db.columns: Add JSON support || July 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6051 #6051] || m.measure: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6052 #6052] || db.connect: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6053 #6053] || m.measure: Add JSON support || July 11, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6059 #6059] || db.connect: Add JSON support || July 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6066 #6066] || r.regression.multi: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6067 #6067] || v.db.connect: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6075 #6075] || r.regression.multi: Add JSON support || July 18, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6077 #6077] || v.db.connect: Add JSON support || July 19, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6091 #6091] || g.findfile: Add JSON support || July 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6098 #6098] || r3.info: Add test file || July 22, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6103 #6103] || r3.info: Add JSON support || July 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6109 #6109] || v.what.rast: Add test file || July 24, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6132 #6132] || v.category: Use CSV format instead of shell format || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6133 #6133] || r.stats: add CSV support || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6134 #6134] || r.volume: add csv column headers || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6140 #6140] || v.what.rast: Add JSON support || July 29, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6145 #6145] || r.profile: Add CSV support || July 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6150 #6150] || r.distance: Update existing test cases || August 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6204 #6204] || r.distance: Add JSON and CSV support || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6205 #6205] || v.class: Add more test cases and fix out-of-bounds bug || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6210 #6210] || v.class: Add JSON and CSV support || August 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6252 #6252] || v.what: Update JSON output format || August 23, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Additional Links ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Ttile&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| OSGeo Wiki Page&lt;br /&gt;
| [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C Add JSON output to different tools in C for GRASS]&lt;br /&gt;
|-&lt;br /&gt;
| Github Fork&lt;br /&gt;
| [https://github.com/NishantBansal2003/grass GitHub Fork]&lt;br /&gt;
|-&lt;br /&gt;
| GSoC Page&lt;br /&gt;
| [https://summerofcode.withgoogle.com/programs/2025/projects/GPVGd3DH Link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples &amp;amp; Images ==&lt;br /&gt;
Below is a list of some of the tasks I completed during my GSoC. Please note that this is not a complete list. For more details on these and other tools, please check out the GRASS documentation from the PR links provided above.&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; JSON output in Python ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; can be directly loaded into a pandas DataFrame and used for plotting with matplotlib.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
# Run r.profile command&lt;br /&gt;
elevation = gs.read_command(&lt;br /&gt;
    &amp;quot;r.profile&amp;quot;,&lt;br /&gt;
    input=&amp;quot;elevation&amp;quot;,&lt;br /&gt;
    coordinates=&amp;quot;641712,226095,641546,224138,641546,222048,641049,221186&amp;quot;,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
    flags=&amp;quot;gc&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Load the JSON data into a dataframe&lt;br /&gt;
df = pd.read_json(elevation)&lt;br /&gt;
print(df)&lt;br /&gt;
&lt;br /&gt;
# Create the scatter plot&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
plt.scatter(df[&amp;quot;distance&amp;quot;], df[&amp;quot;value&amp;quot;], c=df[&amp;quot;color&amp;quot;], marker=&amp;quot;o&amp;quot;)&lt;br /&gt;
plt.title(&amp;quot;Profile of Distance vs. Elevation with Color Coding&amp;quot;)&lt;br /&gt;
plt.xlabel(&amp;quot;Distance (meters)&amp;quot;)&lt;br /&gt;
plt.ylabel(&amp;quot;Elevation&amp;quot;)&lt;br /&gt;
plt.grid(True)&lt;br /&gt;
plt.show()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame Output (first 10 rows) ====  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
         easting       northing   distance      value    color&lt;br /&gt;
0  641712.000000  226095.000000   0.000000  84.661507  #71FF00&lt;br /&gt;
1  641711.154826  226085.036106   9.999675  84.511765  #6FFF00&lt;br /&gt;
2  641710.309651  226075.072213  19.999349  84.241806  #6BFF00&lt;br /&gt;
3  641709.464477  226065.108319  29.999024  84.304214  #6CFF00&lt;br /&gt;
4  641708.619302  226055.144426  39.998699  84.174400  #6AFF00&lt;br /&gt;
5  641707.774128  226045.180532  49.998374  84.112534  #6AFF00&lt;br /&gt;
6  641706.928954  226035.216639  59.998048  84.011208  #68FF00&lt;br /&gt;
7  641706.083779  226025.252745  69.997723  83.834084  #66FF00&lt;br /&gt;
8  641705.238605  226015.288851  79.997398  83.870193  #67FF00&lt;br /&gt;
9  641704.393430  226005.324958  89.997073  84.194908  #6BFF00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Visualization ====  &lt;br /&gt;
&lt;br /&gt;
Matplotlib scatter plot generated from the &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; JSON output: &lt;br /&gt;
&lt;br /&gt;
[[File:R profile plot.png]]&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt; can be directly loaded into a pandas DataFrame.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.class&amp;quot;,&lt;br /&gt;
    map=&amp;quot;bridges&amp;quot;,&lt;br /&gt;
    column=&amp;quot;YEAR_BUILT&amp;quot;,&lt;br /&gt;
    algorithm=&amp;quot;std&amp;quot;,&lt;br /&gt;
    nbclasses=5,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data[&amp;quot;intervals&amp;quot;])&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output (intervals) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
          from           to  frequency&lt;br /&gt;
0  1891.000000  1938.829689        750&lt;br /&gt;
1  1938.829689  1954.722836       1841&lt;br /&gt;
2  1954.722836  1970.615983       5556&lt;br /&gt;
3  1970.615983  1986.509130       1788&lt;br /&gt;
4  1986.509130  1997.000000       1003&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame to display categories and values.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.what.rast&amp;quot;, map=&amp;quot;bridges&amp;quot;, raster=&amp;quot;elevation&amp;quot;, flags=&amp;quot;p&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    category       value&lt;br /&gt;
0       4635   86.851212&lt;br /&gt;
1       4648   87.883255&lt;br /&gt;
2       4688  103.382004&lt;br /&gt;
3       4709   67.387856&lt;br /&gt;
4       4986   90.972832&lt;br /&gt;
5       4991   86.550629&lt;br /&gt;
6       5027   84.256355&lt;br /&gt;
7       5060   79.500443&lt;br /&gt;
8       5071   78.732864&lt;br /&gt;
9       5089   85.703636&lt;br /&gt;
10      5096  115.967323&lt;br /&gt;
11      5130   81.055870&lt;br /&gt;
12      5150   92.812927&lt;br /&gt;
13      5166   88.149483&lt;br /&gt;
14      5184   76.426331&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test Suite Update ====&lt;br /&gt;
Added 6 tests to the test suite, including both regression tests and future-proof tests to ensure functionality remains reliable in future updates.&lt;br /&gt;
&lt;br /&gt;
[[File:V what rast test file.png|700px]]&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame to locate closest points.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
&lt;br /&gt;
result = gs.parse_command(&lt;br /&gt;
    &amp;quot;r.distance&amp;quot;, map=[&amp;quot;zipcodes&amp;quot;, &amp;quot;lakes&amp;quot;], flags=&amp;quot;l&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
df = pd.json_normalize(result)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output (first 10 rows, truncated) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
       distance  from_cell.category  from_cell.easting  ...  to_cell.easting to_cell.northing  to_cell.label&lt;br /&gt;
0  11158.507466               27511      632604.951740  ...    640584.676990    215499.220687       Dam/Weir&lt;br /&gt;
1   1037.271198               27511      631734.981693  ...    632314.961724    221839.026534      Lake/Pond&lt;br /&gt;
2   2276.988836               27511      630015.040913  ...    630765.015090    219459.099418      Reservoir&lt;br /&gt;
3  14614.155031               27513      631055.005106  ...    640584.676990    215499.220687       Dam/Weir&lt;br /&gt;
4   3635.876453               27513      631674.983759  ...    635164.863600    227198.862392      Lake/Pond&lt;br /&gt;
5   6971.335517               27513      630005.041257  ...    630765.015090    219459.099418      Reservoir&lt;br /&gt;
6   8978.927486               27518      632134.967922  ...    640424.682499    215209.229568       Dam/Weir&lt;br /&gt;
7      0.000000               27518      630005.041257  ...    630005.041257    220199.076757      Lake/Pond&lt;br /&gt;
8    699.975899               27518      630005.041257  ...    630705.017156    219379.101868      Reservoir&lt;br /&gt;
9    509.197766               27529      641154.657366  ...    640674.673892    215249.228343       Dam/Weir&lt;br /&gt;
&lt;br /&gt;
[10 rows x 9 columns]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.distance&amp;quot;,&lt;br /&gt;
    flags=&amp;quot;p&amp;quot;,&lt;br /&gt;
    from_=&amp;quot;busroute_a&amp;quot;,&lt;br /&gt;
    to=&amp;quot;busstopsall&amp;quot;,&lt;br /&gt;
    upload=&amp;quot;dist,to_attr&amp;quot;,&lt;br /&gt;
    to_column=&amp;quot;routes&amp;quot;,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
   from_cat  to_cat      dist to_attr&lt;br /&gt;
0         1     112  0.142812     8,A&lt;br /&gt;
1         2      44  0.102327     9,A&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;r.volume&amp;quot;, input=&amp;quot;elevation&amp;quot;, clump=&amp;quot;geology_30m&amp;quot;, flags=&amp;quot;p&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    category  average         sum   cells        volume  easting  northing&lt;br /&gt;
0        217   118.93 86288827.99  725562 8628882798.63   635325    221535&lt;br /&gt;
1        262   108.97 21650560.37  198684 2165056037.02   638935    222495&lt;br /&gt;
2        270    92.23 63578874.44  689373 6357887443.53   642405    221485&lt;br /&gt;
3        405   132.96 33732662.09  253710 3373266208.59   631835    224095&lt;br /&gt;
4        583   139.35  3011288.22   21609  301128821.55   630205    224665&lt;br /&gt;
5        720   124.30   599618.16    4824   59961816.06   634075    227995&lt;br /&gt;
6        766   132.43   936791.20    7074   93679120.08   631425    227845&lt;br /&gt;
7        862   118.31  7302317.47   61722  730231746.74   630505    218885&lt;br /&gt;
8        910    94.20  4235816.13   44964  423581613.11   639215    216365&lt;br /&gt;
9        921   135.22  1693985.23   12528  169398523.05   630755    215445&lt;br /&gt;
10       945   127.24     1145.12       9     114512.03   630015    215015&lt;br /&gt;
11       946    89.91   365748.34    4068   36574833.85   639085    215255&lt;br /&gt;
12       948   129.02   112631.82     873   11263181.57   630185    215115&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test Suite Update ====&lt;br /&gt;
&lt;br /&gt;
Added 4 tests to the test suite, including both regression tests and future-proof tests to ensure functionality remains reliable in future updates.&lt;br /&gt;
&lt;br /&gt;
[[File:Test cmd 2.png|600px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Test cmd output 2.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{GSoC}}&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28687</id>
		<title>GRASS GSoC 2025 Add JSON output to different tools in C</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28687"/>
		<updated>2025-08-24T08:02:56Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: /* Test Suite Update */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Nishant Bansal&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo - Open Source Geospatial Foundation]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/NishantBansal2003/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''GSoC proposal''' || [https://docs.google.com/document/d/1ZPQ9RXU7b_RUDmBmAMeK7ZjFAV1WC7Urd1Zlz678jyw/edit?tab=t.0#heading=h.z6ne0og04bp5 View Proposal]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Abstract =&lt;br /&gt;
Currently, most GRASS tools produce data in plain text by default. This means that users who want to process the output in Python need to create custom parsing code. To make this easier, several modules could be improved by oﬀering JSON as an alternative output format. Recently, the Parson library was added to the GRASS codebase to support JSON output in addition to plain text. Building on the advancements made during the last GSoC, my project aims to expand JSON output capabilities to more tools using the Parson library. I will also work on making the JSON structure introduced in the previous GSoC more useful and consistent. Additionally, I plan to add support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
&lt;br /&gt;
# Working with mentors to finalize the structure of the JSON output.&lt;br /&gt;
# Adding an option to choose the output format (plain text or JSON) for each updated tool.&lt;br /&gt;
# Make the JSON structure introduced during the last GSoC more useful and consistent across tools.&lt;br /&gt;
# Developing Python test cases to ensure that the JSON output works correctly and to avoid future issues.&lt;br /&gt;
# Providing basic documentation and example JSON outputs for each modified tool.&lt;br /&gt;
# Adding support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
# Develop simple examples demonstrating how to use JSON output in a data science workflow, such as reading JSON data into pandas or python.&lt;br /&gt;
&lt;br /&gt;
= Timeline =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Period !! Timeline  !! Tasks   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period &lt;br /&gt;
||&lt;br /&gt;
May 8 - June 1  &lt;br /&gt;
|| &lt;br /&gt;
# Reviewed the work done during the last GSoC to stabilize the JSON output.&lt;br /&gt;
# Discussed the priority tools for adding JSON support.&lt;br /&gt;
# Read GRASS documentation to add Python and JSON examples to the documentation.&lt;br /&gt;
|| &lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;13&amp;quot; | Official Coding Period &lt;br /&gt;
|-&lt;br /&gt;
| '''Week 1''' (June 2 - June 8) || &lt;br /&gt;
# Add JSON support for g.mapset [https://github.com/OSGeo/grass/pull/5810 #5810]&lt;br /&gt;
# Fix uninitialized zone_value in r.univar [https://github.com/OSGeo/grass/pull/5821 #5821]&lt;br /&gt;
# Add JSON support for r.what.color [https://github.com/OSGeo/grass/pull/5822 #5822]&lt;br /&gt;
# Update test file in r.info [https://github.com/OSGeo/grass/pull/5842 #5842]&lt;br /&gt;
# Improve interface for r.info [https://github.com/OSGeo/grass/pull/5859 #5859]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 2''' (June 9 - June 15) ||&lt;br /&gt;
# Add JSON support for g.version [https://github.com/OSGeo/grass/pull/5863 #5863]&lt;br /&gt;
# Add JSON support for i.group [https://github.com/OSGeo/grass/pull/5870 #5870]&lt;br /&gt;
# Add test file in r.stats [https://github.com/OSGeo/grass/pull/5879 #5879]&lt;br /&gt;
# Add tests for JSON output in r.stats [https://github.com/OSGeo/grass/pull/5892 #5892]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 3''' (June 16 - June 22) ||&lt;br /&gt;
# Update the JSON output schema of v.distance [https://github.com/OSGeo/grass/pull/5898 #5898]&lt;br /&gt;
# Fix uninitialized window variable in r.stats [https://github.com/OSGeo/grass/pull/5900 #5900]&lt;br /&gt;
# Add test file in g.list [https://github.com/OSGeo/grass/pull/5906 #5906]&lt;br /&gt;
# Add JSON support for g.list [https://github.com/OSGeo/grass/pull/5921 #5921]&lt;br /&gt;
# Update the JSON output schema of g.region [https://github.com/OSGeo/grass/pull/5929 #5929]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 4''' (June 23 - June 29) ||&lt;br /&gt;
# Update the JSON output schema of v.to.db [https://github.com/OSGeo/grass/pull/5946 #5946]&lt;br /&gt;
# Update the JSON output schema of r.profile [https://github.com/OSGeo/grass/pull/5962 #5962]&lt;br /&gt;
# Add SHELL and CSV output support for r.univar [https://github.com/OSGeo/grass/pull/5966 #5966]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 5''' (June 30 - July 6) ||&lt;br /&gt;
# Add test file in r.regression.line [https://github.com/OSGeo/grass/pull/5990 #5990]&lt;br /&gt;
# Add JSON support for r.regression.line [https://github.com/OSGeo/grass/pull/5993 #5993]&lt;br /&gt;
# Add test file in r.stats.quantile [https://github.com/OSGeo/grass/pull/6002 #6002]&lt;br /&gt;
# Add JSON support for r.stats.quantile [https://github.com/OSGeo/grass/pull/6007 #6007]&lt;br /&gt;
# Add test file in r.volume [https://github.com/OSGeo/grass/pull/6027 #6027]&lt;br /&gt;
# Add JSON support for r.volume [https://github.com/OSGeo/grass/pull/6036 #6036]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 6''' (July 7 - July 13) ||&lt;br /&gt;
# Add JSON support for db.columns [https://github.com/OSGeo/grass/pull/6042 #6042]&lt;br /&gt;
# Add test file in m.measure [https://github.com/OSGeo/grass/pull/6051 #6051]&lt;br /&gt;
# Add test file in db.connect [https://github.com/OSGeo/grass/pull/6052 #6052]&lt;br /&gt;
# Add JSON support for m.measure [https://github.com/OSGeo/grass/pull/6053 #6053]&lt;br /&gt;
# Add JSON support for db.connect [https://github.com/OSGeo/grass/pull/6059 #6059]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | '''Week 7''' (July 14 - July 20) ||&lt;br /&gt;
# Add test file in r.regression.multi [https://github.com/OSGeo/grass/pull/6066 #6066]&lt;br /&gt;
# Add test file in v.db.connect [https://github.com/OSGeo/grass/pull/6067 #6067]&lt;br /&gt;
# Add JSON support for r.regression.multi [https://github.com/OSGeo/grass/pull/6075 #6075]&lt;br /&gt;
# Add JSON support for v.db.connect [https://github.com/OSGeo/grass/pull/6077 #6077]&lt;br /&gt;
# Submit MidTerm evaluation.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 8''' (July 21 - July 27) ||&lt;br /&gt;
# Add JSON support for g.findfile [https://github.com/OSGeo/grass/pull/6091 #6091]&lt;br /&gt;
# Add test file in r3.info [https://github.com/OSGeo/grass/pull/6098 #6098]&lt;br /&gt;
# Add JSON support for r3.info [https://github.com/OSGeo/grass/pull/6103 #6103]&lt;br /&gt;
# Add test file in v.what.rast [https://github.com/OSGeo/grass/pull/6109 #6109]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 9''' (July 28 - August 3) ||&lt;br /&gt;
# Update format to CSV instead of shell in v.category [https://github.com/OSGeo/grass/pull/6132 #6132]&lt;br /&gt;
# Add CSV output support to r.stats [https://github.com/OSGeo/grass/pull/6133 #6133]&lt;br /&gt;
# Add CSV headers to r.volume [https://github.com/OSGeo/grass/pull/6134 #6134]&lt;br /&gt;
# Add JSON support for v.what.rast [https://github.com/OSGeo/grass/pull/6140 #6140]&lt;br /&gt;
# Add CSV output support to r.profile [https://github.com/OSGeo/grass/pull/6145 #6145]&lt;br /&gt;
# Update test cases in r.distance [https://github.com/OSGeo/grass/pull/6150 #6150]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 10''' (August 4 - August 10) ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 11''' (August 11 - August 17) ||&lt;br /&gt;
# Add JSON and CSV support for r.distance [https://github.com/OSGeo/grass/pull/6204 #6204]&lt;br /&gt;
# Add more test cases in v.class [https://github.com/OSGeo/grass/pull/6205 #6205]&lt;br /&gt;
# Add JSON and CSV support for v.class [https://github.com/OSGeo/grass/pull/6210 #6210]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 12''' (August 18 - August 24) ||&lt;br /&gt;
# Update JSON output format for v.what [https://github.com/OSGeo/grass/pull/6252 #6252]&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Evaluation Period &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | August 25 - September 1 ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
# Submit code, final evaluation and write the final GSoC report.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Reports =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* Introduced myself on the [https://discourse.osgeo.org/t/gsoc-2025-introduction-nishant-bansal/147005 OSGeo Discourse mailing list].&lt;br /&gt;
* Created both my [https://wiki.osgeo.org/wiki/User:Nishantbansal2003 personal Wiki page] and the [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C project Wiki page], adding all necessary project-related information.&lt;br /&gt;
* Read GRASS documentation to support the addition of Python and JSON examples.&lt;br /&gt;
* Worked on the following pull requests:&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5688 #5688]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5773 #5773]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5775 #5775]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5784 #5784]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5785 #5785]&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to the g.mapset and r.what.color modules.&lt;br /&gt;
* If time permits, I will begin improving the r.info interface: [https://github.com/OSGeo/grass/issues/5793 Issue #5793]&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
'''Project Discussions and Meetings'''&lt;br /&gt;
* '''14 May 2025''': Introductory meeting discussing JSON support and overall project milestones.&lt;br /&gt;
* '''21 May 2025''': Introduction with fellow developers. Discussed priority tools, adding Python/Pandas examples, and approaches for finalizing the JSON schema for each module.&lt;br /&gt;
&lt;br /&gt;
== Week-1 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.mapset''': Added JSON output support, now you can use -p and -l flags to get JSON-formatted results.&lt;br /&gt;
* '''r.univar''': Fixed a bug causing an uninitialized zone_value.&lt;br /&gt;
* '''r.what.color''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5822 #5822])&lt;br /&gt;
* '''r.info (regression tests)''': To maintain backward compatibility while updating its interface, I added strong regression tests.&lt;br /&gt;
* '''r.info (interface improvements)''': Began improving the module’s interface. (See PR [https://github.com/OSGeo/grass/pull/5859 #5859])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.version (see issue [https://github.com/OSGeo/grass/issues/5816 #5816]).&lt;br /&gt;
* Add JSON output support to i.group (see issue [https://github.com/OSGeo/grass/issues/5815 #5815]).&lt;br /&gt;
* If time permits, write tests for r.stats (see issue [https://github.com/OSGeo/grass/issues/5814 #5814]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-2 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.version''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5863 #5863])&lt;br /&gt;
* '''i.group''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5870 #5870])&lt;br /&gt;
* '''r.stats (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats''': Added tests for JSON output; this uncovered a bug, which was fixed alongside.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.distance (see issue [https://github.com/OSGeo/grass/issues/5846 #5846]).&lt;br /&gt;
* Add JSON output support to g.list (see issue [https://github.com/OSGeo/grass/issues/5848 #5848]).&lt;br /&gt;
* If time permits, fix the JSON output format of g.region (see issue [https://github.com/OSGeo/grass/issues/5828 #5828]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-3 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.distance''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5898 #5898])&lt;br /&gt;
* '''r.stats''': Fixed a bug causing an uninitialized &amp;lt;code&amp;gt;window&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
* '''g.list (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''g.list''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5921 #5921])&lt;br /&gt;
* '''g.region''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5929 #5929])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.to.db (see issue [https://github.com/OSGeo/grass/pull/5711 #5711]).&lt;br /&gt;
* Update JSON output format and documentation of r.profile (see issue [https://github.com/OSGeo/grass/pull/5834 #5834]).&lt;br /&gt;
* If time permits, add shell and csv output formats to r.univar (see issue [https://github.com/OSGeo/grass/pull/5824 #5824]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-4 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.to.db''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5946 #5946])&lt;br /&gt;
* '''r.profile''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5962 #5962])&lt;br /&gt;
* '''r.univar''': Implemented SHELL and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/5966 #5966])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.regression.line (see issue [https://github.com/OSGeo/grass/pull/5950 #5950]).&lt;br /&gt;
* Add JSON output support to r.stats.quantile (see issue [https://github.com/OSGeo/grass/pull/5951 #5951]).&lt;br /&gt;
* Add JSON output support to r.volume (see issue [https://github.com/OSGeo/grass/pull/5949 #5949]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-5 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.line (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.line''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5993 #5993])&lt;br /&gt;
* '''r.stats.quantile (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats.quantile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6007 #6007])&lt;br /&gt;
* '''r.volume (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.volume''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6036 #6036])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to m.measure (see issue [https://github.com/OSGeo/grass/pull/6006 #6006]).&lt;br /&gt;
* Add JSON output support to db.columns (see issue [https://github.com/OSGeo/grass/pull/6008 #6008]).&lt;br /&gt;
* Add JSON output support to db.connect (see issue [https://github.com/OSGeo/grass/pull/6009 #6009]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-6 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''db.columns''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6042 #6042])&lt;br /&gt;
* '''m.measure (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''m.measure''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6053 #6053])&lt;br /&gt;
* '''db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6059 #6059])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to v.db.connect (see issue [https://github.com/OSGeo/grass/pull/6014 #6014]).&lt;br /&gt;
* Add JSON output support to r.regression.multi (see issue [https://github.com/OSGeo/grass/pull/6010 #6010]).&lt;br /&gt;
* If time permits, add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* If time permits, add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-7 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.multi (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''v.db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.multi''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6075 #6075])&lt;br /&gt;
* '''v.db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6077 #6077])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* Add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
* If time permits, add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-8 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.findfile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6091 #6091])&lt;br /&gt;
* '''r3.info (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a flag-handling bug.&lt;br /&gt;
* '''r3.info''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6103 #6103])&lt;br /&gt;
* '''v.what.rast (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a sorting bug.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
* Update format to CSV instead of shell in v.category (see issue [https://github.com/OSGeo/grass/pull/6025 #6025]).&lt;br /&gt;
* Add CSV output support to r.stats (see issue [https://github.com/OSGeo/grass/issues/5835 #5835]).&lt;br /&gt;
* If time permits, add CSV output support to r.profile (see issue [https://github.com/OSGeo/grass/issues/5958 #5958]).&lt;br /&gt;
* If time permits, add CSV headers to r.volume (see issue [https://github.com/OSGeo/grass/issues/6049 #6049]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I don’t have any blockers this week. However, I’ll be a little busy with some personal work from August 3 to August 10, so I’ll try to complete next week’s tasks this week itself.&lt;br /&gt;
&lt;br /&gt;
== Week-9 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.category''': Updated format to CSV instead of shell. (See PR [https://github.com/OSGeo/grass/pull/6132 #6132])&lt;br /&gt;
* '''r.stats''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6133 #6133])&lt;br /&gt;
* '''r.volume''': Implemented CSV column headers support. (See PR [https://github.com/OSGeo/grass/pull/6134 #6134])&lt;br /&gt;
* '''v.what.rast''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6140 #6140])&lt;br /&gt;
* '''r.profile''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6145 #6145])&lt;br /&gt;
* '''r.distance (regression tests)''': Updated regression tests to ensure backward compatibility with new JSON support. (See PR [https://github.com/OSGeo/grass/pull/6150 #6150])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* I’ll be a bit busy with some personal work from August 3 to 10, so I completed next week’s tasks last week itself. I’ve already informed my mentors about my limited availability.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* Yes, I’ll be a bit busy with some personal work from August 3 to 10.&lt;br /&gt;
&lt;br /&gt;
== Week-10 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* This week I was busy with some personal work, so I did not complete any additional tasks. However, I had already finished this week’s tasks last week. This week, I mostly focused on handling reviews for those PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.distance (see issue [https://github.com/OSGeo/grass/issues/6135 #6135]).&lt;br /&gt;
* Add JSON output support to v.class (see issue [https://github.com/OSGeo/grass/issues/6136 #6136]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-11 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.distance''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6204 #6204])&lt;br /&gt;
* '''v.class''': Updated regression tests to ensure backward compatibility with new JSON support and fixed a out-of-bounds bug. (See PR [https://github.com/OSGeo/grass/pull/6205 #6205])&lt;br /&gt;
* '''v.class''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6210 #6210])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Discuss next week’s tasks with my mentors, if no issues are assigned, I’ll identify tools that currently lack JSON support and evaluate which ones are feasible to add it to.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-12 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.what''': Update JSON output format. (See PR [https://github.com/OSGeo/grass/pull/6252 #6252])&lt;br /&gt;
* Addressed review comments on my open PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
= Final Report =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Title''' || Add JSON output to different tools in C for GRASS&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo (Open Source Geospatial Foundation)]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''Program''' || Google Summer of Code 2025&lt;br /&gt;
|-&lt;br /&gt;
| '''Contributions''' || [https://github.com/OSGeo/grass/pulls?q=is%3Apr+author%3ANishantBansal2003+ Pull Requests]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
During my GSoC project, I addressed the challenge that most GRASS tools produced only plain text output, forcing users to write custom parsing code for Python-based workflows. The task was to make these tools more data-science friendly by adding structured output formats. To achieve this, I extended the use of the Parson library to implement consistent JSON output across multiple modules, refined the JSON structure introduced in the previous GSoC, and added optional support for SHELL and CSV outputs where appropriate. I developed comprehensive Python test cases, ensured backward compatibility, and provided documentation with practical examples such as loading JSON into pandas. As a result, GRASS users can now directly consume structured outputs in modern workflows, reducing parsing overhead, improving interoperability, and paving the way for broader adoption of GRASS in data science contexts.&lt;br /&gt;
&lt;br /&gt;
== The state of integration BEFORE the start of GSoC ==&lt;br /&gt;
Before the start of GSoC, the integration of GRASS with data science workflows was limited due to several challenges. The JSON outputs introduced in the previous GSoC contained deeply nested hierarchies, making them difficult to use directly with libraries such as '''pandas''' or in broader data science pipelines. While some tools already supported JSON (e.g., &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;), many important and highly demanded modules lacked JSON support, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt; and many more. This lack of consistency limited the seamless adoption of GRASS in analytics and machine learning contexts. Moreover, there was no clear '''documentation of the JSON schema''' or guidance on how to parse and utilize these outputs effectively in '''python or pandas''', which made it difficult for users to understand the use cases and integrate GRASS outputs into modern data science workflows.&lt;br /&gt;
&lt;br /&gt;
== The state of integration AFTER GSoC ==&lt;br /&gt;
&lt;br /&gt;
After GSoC, the integration state of JSON and alternative output formats in GRASS has significantly improved. I refactored the JSON structures for tools such as &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;, and others, removing unnecessary nesting introduced during the previous GSoC. This makes their outputs much easier to consume directly in &amp;lt;b&amp;gt;Python&amp;lt;/b&amp;gt; or with &amp;lt;b&amp;gt;pandas&amp;lt;/b&amp;gt;. In addition, JSON support has been extended to many essential and frequently used modules, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;, and many more. I also added detailed documentation of the JSON schema and provided examples showing how to parse and use these outputs effectively with Python and pandas. Together, these improvements make the adoption of GRASS in modern &amp;lt;b&amp;gt;data science workflows&amp;lt;/b&amp;gt; far more seamless and accessible.&lt;br /&gt;
&lt;br /&gt;
=== Enhancements made per tool ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;: Simplified JSON structure for univariate statistics, removed unnecessary hierarchy, and added new output format options (CSV, shell).&lt;br /&gt;
* &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;: Added JSON support for querying raster map colors, with a Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;: Added JSON support for reporting the current mapset, with a Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;: Updated JSON structure for raster map metadata, removing hierarchy for easier parsing. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;: Simplified JSON output for geographic region boundaries, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;: Added JSON support for GRASS version information, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;: Added JSON support for listing imagery groups, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;: Added JSON and CSV support for raster area statistics, with Python and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;: Refined JSON schema for nearest element queries, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;: Added JSON support for listing GRASS database files, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;: Updated JSON schema for printing vector attribute values, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;: Simplified JSON output, added CSV support, and included a matplotlib example for profile visualization.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;: Updated JSON schema for linear regression between rasters, with Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;: Updated JSON schema for category quantiles, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;: Added JSON support for raster volume calculations, fixed missing headers in CSV output, and provided pandas examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.columns&amp;lt;/code&amp;gt;: Added JSON output for listing database table columns, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;: Added JSON output for measuring lengths and areas, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.connect&amp;lt;/code&amp;gt;: Added JSON output for DB connection info, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.multi&amp;lt;/code&amp;gt;: Added JSON output for multiple regression between rasters, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.db.connect&amp;lt;/code&amp;gt;: Added JSON output for vector map attribute connections, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.findfile&amp;lt;/code&amp;gt;: Added JSON output for GRASS database file search, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;: Added JSON output for 3D raster map info, with Python example. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;: Added JSON output for extracting raster values at vector points, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt;: Added JSON and CSV support for locating closest points between raster objects, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;: Added JSON and CSV support for attribute data, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;: Migrated from manually written JSON to Parson-based JSON output, simplified schema, and provided Python parsing examples.&lt;br /&gt;
&lt;br /&gt;
All these changes were accompanied by regression tests to ensure that new JSON/CSV/SHELL/PLAIN output options do not break existing functionality. Additionally, I introduced comprehensive Python test cases for these outputs, making the enhancements reliable and future-proof. During this work, I also fixed several bugs in modules such as &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;, strengthening the stability of GRASS as a whole.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
To sum up, I’m glad to have met the three core objectives of my project with the constant support of my mentors:&lt;br /&gt;
&lt;br /&gt;
* Brought JSON output to several important and long-requested modules, added regression tests, and ensured reliable future test coverage.&lt;br /&gt;
* Enhanced the JSON schema introduced in last year’s GSoC by reducing unnecessary hierarchy, making it more consistent across tools, and providing Python/Pandas examples for practical use.&lt;br /&gt;
* Expanded &amp;lt;b&amp;gt;CSV&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;SHELL&amp;lt;/b&amp;gt; output formats to additional tools where they could bring value.&lt;br /&gt;
&lt;br /&gt;
This journey has been both rewarding and educational, and I’m grateful for the opportunity to contribute to GRASS through GSoC 2025. I especially want to thank &amp;lt;b&amp;gt;Anna Petrasova&amp;lt;/b&amp;gt; and the GRASS Development Team for their guidance and support. I’m excited to keep building on this work and further extend JSON and other features in the future.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
There is significant scope to extend structured output support across GRASS tools. In particular, future efforts should focus on:&lt;br /&gt;
* Expanding JSON output to additional modules, with details tracked here: [https://github.com/orgs/OSGeo/projects/10 GRASS JSON Outputs Project].&lt;br /&gt;
* Refining and standardizing the JSON schema to better support complex workflows and integrations.&lt;br /&gt;
* Exploring and implementing other output formats (e.g., SHELL, CSV, PLAIN) where they can improve usability and automation.&lt;br /&gt;
I also plan to continue contributing to GRASS by extending JSON support to more modules and engaging in community discussions around schema design and format integration.&lt;br /&gt;
&lt;br /&gt;
== Log of Pull Requests ==&lt;br /&gt;
Below is a list of pull requests submitted to the GRASS repository during GSoC 2025:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pull Request !! Description  !! Date   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5688 #5688] || r.univar: Fix JSON structure || May 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5773 #5773] || r.what.color: Add test file || May 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5775 #5775] || g.mapset: Add test file || May 26, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5784 #5784] || r.info: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;Closed&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5785 #5785] || g.region: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5810 #5810] || g.mapset: Add JSON support || June 2, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5821 #5821] || r.univar: Fix uninitialized zone_value || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5822 #5822] || r.what.color: Add JSON support || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5842 #5842] || r.info: Update test file || June 5, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5859 #5859] || r.info: Improve interface || June 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5863 #5863] || g.version: Add JSON support || June 9, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5870 #5870] || i.group: Add JSON support || June 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5879 #5879] || r.stats: Add test file || June 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5892 #5892] || r.stats: Add tests for JSON output || June 14, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5898 #5898] || v.distance: Update JSON format || June 16, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5900 #5900] || r.stats: fix uninitialised window value || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5906 #5906] || g.list: Add test file || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5921 #5921] || g.list: Add JSON support || June 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5929 #5929] || g.region: Update JSON format || June 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5946 #5946] || v.to.db: Update JSON format || June 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5962 #5962] || r.profile: Update JSON format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5966 #5966] || r.univar: Add shell and CSV format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5990 #5990] || r.regression.line: Add test file || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5993 #5993] || r.regression.line: Add JSON support || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6002 #6002] || r.stats.quantile: Add test file || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6007 #6007] || r.stats.quantile: Add JSON support || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6027 #6027] || r.volume: Add test file || July 4, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6036 #6036] || r.volume: Add JSON support || July 6, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6042 #6042] || db.columns: Add JSON support || July 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6051 #6051] || m.measure: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6052 #6052] || db.connect: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6053 #6053] || m.measure: Add JSON support || July 11, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6059 #6059] || db.connect: Add JSON support || July 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6066 #6066] || r.regression.multi: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6067 #6067] || v.db.connect: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6075 #6075] || r.regression.multi: Add JSON support || July 18, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6077 #6077] || v.db.connect: Add JSON support || July 19, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6091 #6091] || g.findfile: Add JSON support || July 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6098 #6098] || r3.info: Add test file || July 22, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6103 #6103] || r3.info: Add JSON support || July 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6109 #6109] || v.what.rast: Add test file || July 24, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6132 #6132] || v.category: Use CSV format instead of shell format || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6133 #6133] || r.stats: add CSV support || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6134 #6134] || r.volume: add csv column headers || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6140 #6140] || v.what.rast: Add JSON support || July 29, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6145 #6145] || r.profile: Add CSV support || July 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6150 #6150] || r.distance: Update existing test cases || August 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6204 #6204] || r.distance: Add JSON and CSV support || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6205 #6205] || v.class: Add more test cases and fix out-of-bounds bug || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6210 #6210] || v.class: Add JSON and CSV support || August 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6252 #6252] || v.what: Update JSON output format || August 23, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Additional Links ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Ttile&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| OSGeo Wiki Page&lt;br /&gt;
| [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C Add JSON output to different tools in C for GRASS]&lt;br /&gt;
|-&lt;br /&gt;
| Github Fork&lt;br /&gt;
| [https://github.com/NishantBansal2003/grass GitHub Fork]&lt;br /&gt;
|-&lt;br /&gt;
| GSoC Page&lt;br /&gt;
| [https://summerofcode.withgoogle.com/programs/2025/projects/GPVGd3DH Link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples &amp;amp; Images ==&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; JSON output in Python ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; can be directly loaded into a pandas DataFrame and used for plotting with matplotlib.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
# Run r.profile command&lt;br /&gt;
elevation = gs.read_command(&lt;br /&gt;
    &amp;quot;r.profile&amp;quot;,&lt;br /&gt;
    input=&amp;quot;elevation&amp;quot;,&lt;br /&gt;
    coordinates=&amp;quot;641712,226095,641546,224138,641546,222048,641049,221186&amp;quot;,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
    flags=&amp;quot;gc&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Load the JSON data into a dataframe&lt;br /&gt;
df = pd.read_json(elevation)&lt;br /&gt;
print(df)&lt;br /&gt;
&lt;br /&gt;
# Create the scatter plot&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
plt.scatter(df[&amp;quot;distance&amp;quot;], df[&amp;quot;value&amp;quot;], c=df[&amp;quot;color&amp;quot;], marker=&amp;quot;o&amp;quot;)&lt;br /&gt;
plt.title(&amp;quot;Profile of Distance vs. Elevation with Color Coding&amp;quot;)&lt;br /&gt;
plt.xlabel(&amp;quot;Distance (meters)&amp;quot;)&lt;br /&gt;
plt.ylabel(&amp;quot;Elevation&amp;quot;)&lt;br /&gt;
plt.grid(True)&lt;br /&gt;
plt.show()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame Output (first 10 rows) ====  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
         easting       northing   distance      value    color&lt;br /&gt;
0  641712.000000  226095.000000   0.000000  84.661507  #71FF00&lt;br /&gt;
1  641711.154826  226085.036106   9.999675  84.511765  #6FFF00&lt;br /&gt;
2  641710.309651  226075.072213  19.999349  84.241806  #6BFF00&lt;br /&gt;
3  641709.464477  226065.108319  29.999024  84.304214  #6CFF00&lt;br /&gt;
4  641708.619302  226055.144426  39.998699  84.174400  #6AFF00&lt;br /&gt;
5  641707.774128  226045.180532  49.998374  84.112534  #6AFF00&lt;br /&gt;
6  641706.928954  226035.216639  59.998048  84.011208  #68FF00&lt;br /&gt;
7  641706.083779  226025.252745  69.997723  83.834084  #66FF00&lt;br /&gt;
8  641705.238605  226015.288851  79.997398  83.870193  #67FF00&lt;br /&gt;
9  641704.393430  226005.324958  89.997073  84.194908  #6BFF00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Visualization ====  &lt;br /&gt;
&lt;br /&gt;
Matplotlib scatter plot generated from the &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; JSON output: &lt;br /&gt;
&lt;br /&gt;
[[File:R profile plot.png]]&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt; can be directly loaded into a pandas DataFrame.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.class&amp;quot;,&lt;br /&gt;
    map=&amp;quot;bridges&amp;quot;,&lt;br /&gt;
    column=&amp;quot;YEAR_BUILT&amp;quot;,&lt;br /&gt;
    algorithm=&amp;quot;std&amp;quot;,&lt;br /&gt;
    nbclasses=5,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data[&amp;quot;intervals&amp;quot;])&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output (intervals) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
          from           to  frequency&lt;br /&gt;
0  1891.000000  1938.829689        750&lt;br /&gt;
1  1938.829689  1954.722836       1841&lt;br /&gt;
2  1954.722836  1970.615983       5556&lt;br /&gt;
3  1970.615983  1986.509130       1788&lt;br /&gt;
4  1986.509130  1997.000000       1003&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame to display categories and values.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.what.rast&amp;quot;, map=&amp;quot;bridges&amp;quot;, raster=&amp;quot;elevation&amp;quot;, flags=&amp;quot;p&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    category       value&lt;br /&gt;
0       4635   86.851212&lt;br /&gt;
1       4648   87.883255&lt;br /&gt;
2       4688  103.382004&lt;br /&gt;
3       4709   67.387856&lt;br /&gt;
4       4986   90.972832&lt;br /&gt;
5       4991   86.550629&lt;br /&gt;
6       5027   84.256355&lt;br /&gt;
7       5060   79.500443&lt;br /&gt;
8       5071   78.732864&lt;br /&gt;
9       5089   85.703636&lt;br /&gt;
10      5096  115.967323&lt;br /&gt;
11      5130   81.055870&lt;br /&gt;
12      5150   92.812927&lt;br /&gt;
13      5166   88.149483&lt;br /&gt;
14      5184   76.426331&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test Suite Update ====&lt;br /&gt;
Added 6 tests to the test suite, including both regression tests and future-proof tests to ensure functionality remains reliable in future updates.&lt;br /&gt;
&lt;br /&gt;
[[File:V what rast test file.png|700px]]&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame to locate closest points.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
&lt;br /&gt;
result = gs.parse_command(&lt;br /&gt;
    &amp;quot;r.distance&amp;quot;, map=[&amp;quot;zipcodes&amp;quot;, &amp;quot;lakes&amp;quot;], flags=&amp;quot;l&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
df = pd.json_normalize(result)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output (first 10 rows, truncated) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
       distance  from_cell.category  from_cell.easting  ...  to_cell.easting to_cell.northing  to_cell.label&lt;br /&gt;
0  11158.507466               27511      632604.951740  ...    640584.676990    215499.220687       Dam/Weir&lt;br /&gt;
1   1037.271198               27511      631734.981693  ...    632314.961724    221839.026534      Lake/Pond&lt;br /&gt;
2   2276.988836               27511      630015.040913  ...    630765.015090    219459.099418      Reservoir&lt;br /&gt;
3  14614.155031               27513      631055.005106  ...    640584.676990    215499.220687       Dam/Weir&lt;br /&gt;
4   3635.876453               27513      631674.983759  ...    635164.863600    227198.862392      Lake/Pond&lt;br /&gt;
5   6971.335517               27513      630005.041257  ...    630765.015090    219459.099418      Reservoir&lt;br /&gt;
6   8978.927486               27518      632134.967922  ...    640424.682499    215209.229568       Dam/Weir&lt;br /&gt;
7      0.000000               27518      630005.041257  ...    630005.041257    220199.076757      Lake/Pond&lt;br /&gt;
8    699.975899               27518      630005.041257  ...    630705.017156    219379.101868      Reservoir&lt;br /&gt;
9    509.197766               27529      641154.657366  ...    640674.673892    215249.228343       Dam/Weir&lt;br /&gt;
&lt;br /&gt;
[10 rows x 9 columns]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.distance&amp;quot;,&lt;br /&gt;
    flags=&amp;quot;p&amp;quot;,&lt;br /&gt;
    from_=&amp;quot;busroute_a&amp;quot;,&lt;br /&gt;
    to=&amp;quot;busstopsall&amp;quot;,&lt;br /&gt;
    upload=&amp;quot;dist,to_attr&amp;quot;,&lt;br /&gt;
    to_column=&amp;quot;routes&amp;quot;,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
   from_cat  to_cat      dist to_attr&lt;br /&gt;
0         1     112  0.142812     8,A&lt;br /&gt;
1         2      44  0.102327     9,A&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;r.volume&amp;quot;, input=&amp;quot;elevation&amp;quot;, clump=&amp;quot;geology_30m&amp;quot;, flags=&amp;quot;p&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    category  average         sum   cells        volume  easting  northing&lt;br /&gt;
0        217   118.93 86288827.99  725562 8628882798.63   635325    221535&lt;br /&gt;
1        262   108.97 21650560.37  198684 2165056037.02   638935    222495&lt;br /&gt;
2        270    92.23 63578874.44  689373 6357887443.53   642405    221485&lt;br /&gt;
3        405   132.96 33732662.09  253710 3373266208.59   631835    224095&lt;br /&gt;
4        583   139.35  3011288.22   21609  301128821.55   630205    224665&lt;br /&gt;
5        720   124.30   599618.16    4824   59961816.06   634075    227995&lt;br /&gt;
6        766   132.43   936791.20    7074   93679120.08   631425    227845&lt;br /&gt;
7        862   118.31  7302317.47   61722  730231746.74   630505    218885&lt;br /&gt;
8        910    94.20  4235816.13   44964  423581613.11   639215    216365&lt;br /&gt;
9        921   135.22  1693985.23   12528  169398523.05   630755    215445&lt;br /&gt;
10       945   127.24     1145.12       9     114512.03   630015    215015&lt;br /&gt;
11       946    89.91   365748.34    4068   36574833.85   639085    215255&lt;br /&gt;
12       948   129.02   112631.82     873   11263181.57   630185    215115&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test Suite Update ====&lt;br /&gt;
&lt;br /&gt;
Added 4 tests to the test suite, including both regression tests and future-proof tests to ensure functionality remains reliable in future updates.&lt;br /&gt;
&lt;br /&gt;
[[File:Test cmd 2.png|600px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Test cmd output 2.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{GSoC}}&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=File:Test_cmd_output_2.png&amp;diff=28686</id>
		<title>File:Test cmd output 2.png</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=File:Test_cmd_output_2.png&amp;diff=28686"/>
		<updated>2025-08-24T08:02:48Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;test cmd output 2&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28685</id>
		<title>GRASS GSoC 2025 Add JSON output to different tools in C</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28685"/>
		<updated>2025-08-24T08:01:12Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: /* Test Suite Update */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Nishant Bansal&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo - Open Source Geospatial Foundation]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/NishantBansal2003/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''GSoC proposal''' || [https://docs.google.com/document/d/1ZPQ9RXU7b_RUDmBmAMeK7ZjFAV1WC7Urd1Zlz678jyw/edit?tab=t.0#heading=h.z6ne0og04bp5 View Proposal]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Abstract =&lt;br /&gt;
Currently, most GRASS tools produce data in plain text by default. This means that users who want to process the output in Python need to create custom parsing code. To make this easier, several modules could be improved by oﬀering JSON as an alternative output format. Recently, the Parson library was added to the GRASS codebase to support JSON output in addition to plain text. Building on the advancements made during the last GSoC, my project aims to expand JSON output capabilities to more tools using the Parson library. I will also work on making the JSON structure introduced in the previous GSoC more useful and consistent. Additionally, I plan to add support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
&lt;br /&gt;
# Working with mentors to finalize the structure of the JSON output.&lt;br /&gt;
# Adding an option to choose the output format (plain text or JSON) for each updated tool.&lt;br /&gt;
# Make the JSON structure introduced during the last GSoC more useful and consistent across tools.&lt;br /&gt;
# Developing Python test cases to ensure that the JSON output works correctly and to avoid future issues.&lt;br /&gt;
# Providing basic documentation and example JSON outputs for each modified tool.&lt;br /&gt;
# Adding support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
# Develop simple examples demonstrating how to use JSON output in a data science workflow, such as reading JSON data into pandas or python.&lt;br /&gt;
&lt;br /&gt;
= Timeline =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Period !! Timeline  !! Tasks   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period &lt;br /&gt;
||&lt;br /&gt;
May 8 - June 1  &lt;br /&gt;
|| &lt;br /&gt;
# Reviewed the work done during the last GSoC to stabilize the JSON output.&lt;br /&gt;
# Discussed the priority tools for adding JSON support.&lt;br /&gt;
# Read GRASS documentation to add Python and JSON examples to the documentation.&lt;br /&gt;
|| &lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;13&amp;quot; | Official Coding Period &lt;br /&gt;
|-&lt;br /&gt;
| '''Week 1''' (June 2 - June 8) || &lt;br /&gt;
# Add JSON support for g.mapset [https://github.com/OSGeo/grass/pull/5810 #5810]&lt;br /&gt;
# Fix uninitialized zone_value in r.univar [https://github.com/OSGeo/grass/pull/5821 #5821]&lt;br /&gt;
# Add JSON support for r.what.color [https://github.com/OSGeo/grass/pull/5822 #5822]&lt;br /&gt;
# Update test file in r.info [https://github.com/OSGeo/grass/pull/5842 #5842]&lt;br /&gt;
# Improve interface for r.info [https://github.com/OSGeo/grass/pull/5859 #5859]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 2''' (June 9 - June 15) ||&lt;br /&gt;
# Add JSON support for g.version [https://github.com/OSGeo/grass/pull/5863 #5863]&lt;br /&gt;
# Add JSON support for i.group [https://github.com/OSGeo/grass/pull/5870 #5870]&lt;br /&gt;
# Add test file in r.stats [https://github.com/OSGeo/grass/pull/5879 #5879]&lt;br /&gt;
# Add tests for JSON output in r.stats [https://github.com/OSGeo/grass/pull/5892 #5892]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 3''' (June 16 - June 22) ||&lt;br /&gt;
# Update the JSON output schema of v.distance [https://github.com/OSGeo/grass/pull/5898 #5898]&lt;br /&gt;
# Fix uninitialized window variable in r.stats [https://github.com/OSGeo/grass/pull/5900 #5900]&lt;br /&gt;
# Add test file in g.list [https://github.com/OSGeo/grass/pull/5906 #5906]&lt;br /&gt;
# Add JSON support for g.list [https://github.com/OSGeo/grass/pull/5921 #5921]&lt;br /&gt;
# Update the JSON output schema of g.region [https://github.com/OSGeo/grass/pull/5929 #5929]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 4''' (June 23 - June 29) ||&lt;br /&gt;
# Update the JSON output schema of v.to.db [https://github.com/OSGeo/grass/pull/5946 #5946]&lt;br /&gt;
# Update the JSON output schema of r.profile [https://github.com/OSGeo/grass/pull/5962 #5962]&lt;br /&gt;
# Add SHELL and CSV output support for r.univar [https://github.com/OSGeo/grass/pull/5966 #5966]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 5''' (June 30 - July 6) ||&lt;br /&gt;
# Add test file in r.regression.line [https://github.com/OSGeo/grass/pull/5990 #5990]&lt;br /&gt;
# Add JSON support for r.regression.line [https://github.com/OSGeo/grass/pull/5993 #5993]&lt;br /&gt;
# Add test file in r.stats.quantile [https://github.com/OSGeo/grass/pull/6002 #6002]&lt;br /&gt;
# Add JSON support for r.stats.quantile [https://github.com/OSGeo/grass/pull/6007 #6007]&lt;br /&gt;
# Add test file in r.volume [https://github.com/OSGeo/grass/pull/6027 #6027]&lt;br /&gt;
# Add JSON support for r.volume [https://github.com/OSGeo/grass/pull/6036 #6036]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 6''' (July 7 - July 13) ||&lt;br /&gt;
# Add JSON support for db.columns [https://github.com/OSGeo/grass/pull/6042 #6042]&lt;br /&gt;
# Add test file in m.measure [https://github.com/OSGeo/grass/pull/6051 #6051]&lt;br /&gt;
# Add test file in db.connect [https://github.com/OSGeo/grass/pull/6052 #6052]&lt;br /&gt;
# Add JSON support for m.measure [https://github.com/OSGeo/grass/pull/6053 #6053]&lt;br /&gt;
# Add JSON support for db.connect [https://github.com/OSGeo/grass/pull/6059 #6059]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | '''Week 7''' (July 14 - July 20) ||&lt;br /&gt;
# Add test file in r.regression.multi [https://github.com/OSGeo/grass/pull/6066 #6066]&lt;br /&gt;
# Add test file in v.db.connect [https://github.com/OSGeo/grass/pull/6067 #6067]&lt;br /&gt;
# Add JSON support for r.regression.multi [https://github.com/OSGeo/grass/pull/6075 #6075]&lt;br /&gt;
# Add JSON support for v.db.connect [https://github.com/OSGeo/grass/pull/6077 #6077]&lt;br /&gt;
# Submit MidTerm evaluation.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 8''' (July 21 - July 27) ||&lt;br /&gt;
# Add JSON support for g.findfile [https://github.com/OSGeo/grass/pull/6091 #6091]&lt;br /&gt;
# Add test file in r3.info [https://github.com/OSGeo/grass/pull/6098 #6098]&lt;br /&gt;
# Add JSON support for r3.info [https://github.com/OSGeo/grass/pull/6103 #6103]&lt;br /&gt;
# Add test file in v.what.rast [https://github.com/OSGeo/grass/pull/6109 #6109]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 9''' (July 28 - August 3) ||&lt;br /&gt;
# Update format to CSV instead of shell in v.category [https://github.com/OSGeo/grass/pull/6132 #6132]&lt;br /&gt;
# Add CSV output support to r.stats [https://github.com/OSGeo/grass/pull/6133 #6133]&lt;br /&gt;
# Add CSV headers to r.volume [https://github.com/OSGeo/grass/pull/6134 #6134]&lt;br /&gt;
# Add JSON support for v.what.rast [https://github.com/OSGeo/grass/pull/6140 #6140]&lt;br /&gt;
# Add CSV output support to r.profile [https://github.com/OSGeo/grass/pull/6145 #6145]&lt;br /&gt;
# Update test cases in r.distance [https://github.com/OSGeo/grass/pull/6150 #6150]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 10''' (August 4 - August 10) ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 11''' (August 11 - August 17) ||&lt;br /&gt;
# Add JSON and CSV support for r.distance [https://github.com/OSGeo/grass/pull/6204 #6204]&lt;br /&gt;
# Add more test cases in v.class [https://github.com/OSGeo/grass/pull/6205 #6205]&lt;br /&gt;
# Add JSON and CSV support for v.class [https://github.com/OSGeo/grass/pull/6210 #6210]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 12''' (August 18 - August 24) ||&lt;br /&gt;
# Update JSON output format for v.what [https://github.com/OSGeo/grass/pull/6252 #6252]&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Evaluation Period &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | August 25 - September 1 ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
# Submit code, final evaluation and write the final GSoC report.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Reports =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* Introduced myself on the [https://discourse.osgeo.org/t/gsoc-2025-introduction-nishant-bansal/147005 OSGeo Discourse mailing list].&lt;br /&gt;
* Created both my [https://wiki.osgeo.org/wiki/User:Nishantbansal2003 personal Wiki page] and the [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C project Wiki page], adding all necessary project-related information.&lt;br /&gt;
* Read GRASS documentation to support the addition of Python and JSON examples.&lt;br /&gt;
* Worked on the following pull requests:&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5688 #5688]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5773 #5773]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5775 #5775]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5784 #5784]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5785 #5785]&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to the g.mapset and r.what.color modules.&lt;br /&gt;
* If time permits, I will begin improving the r.info interface: [https://github.com/OSGeo/grass/issues/5793 Issue #5793]&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
'''Project Discussions and Meetings'''&lt;br /&gt;
* '''14 May 2025''': Introductory meeting discussing JSON support and overall project milestones.&lt;br /&gt;
* '''21 May 2025''': Introduction with fellow developers. Discussed priority tools, adding Python/Pandas examples, and approaches for finalizing the JSON schema for each module.&lt;br /&gt;
&lt;br /&gt;
== Week-1 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.mapset''': Added JSON output support, now you can use -p and -l flags to get JSON-formatted results.&lt;br /&gt;
* '''r.univar''': Fixed a bug causing an uninitialized zone_value.&lt;br /&gt;
* '''r.what.color''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5822 #5822])&lt;br /&gt;
* '''r.info (regression tests)''': To maintain backward compatibility while updating its interface, I added strong regression tests.&lt;br /&gt;
* '''r.info (interface improvements)''': Began improving the module’s interface. (See PR [https://github.com/OSGeo/grass/pull/5859 #5859])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.version (see issue [https://github.com/OSGeo/grass/issues/5816 #5816]).&lt;br /&gt;
* Add JSON output support to i.group (see issue [https://github.com/OSGeo/grass/issues/5815 #5815]).&lt;br /&gt;
* If time permits, write tests for r.stats (see issue [https://github.com/OSGeo/grass/issues/5814 #5814]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-2 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.version''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5863 #5863])&lt;br /&gt;
* '''i.group''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5870 #5870])&lt;br /&gt;
* '''r.stats (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats''': Added tests for JSON output; this uncovered a bug, which was fixed alongside.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.distance (see issue [https://github.com/OSGeo/grass/issues/5846 #5846]).&lt;br /&gt;
* Add JSON output support to g.list (see issue [https://github.com/OSGeo/grass/issues/5848 #5848]).&lt;br /&gt;
* If time permits, fix the JSON output format of g.region (see issue [https://github.com/OSGeo/grass/issues/5828 #5828]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-3 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.distance''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5898 #5898])&lt;br /&gt;
* '''r.stats''': Fixed a bug causing an uninitialized &amp;lt;code&amp;gt;window&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
* '''g.list (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''g.list''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5921 #5921])&lt;br /&gt;
* '''g.region''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5929 #5929])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.to.db (see issue [https://github.com/OSGeo/grass/pull/5711 #5711]).&lt;br /&gt;
* Update JSON output format and documentation of r.profile (see issue [https://github.com/OSGeo/grass/pull/5834 #5834]).&lt;br /&gt;
* If time permits, add shell and csv output formats to r.univar (see issue [https://github.com/OSGeo/grass/pull/5824 #5824]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-4 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.to.db''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5946 #5946])&lt;br /&gt;
* '''r.profile''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5962 #5962])&lt;br /&gt;
* '''r.univar''': Implemented SHELL and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/5966 #5966])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.regression.line (see issue [https://github.com/OSGeo/grass/pull/5950 #5950]).&lt;br /&gt;
* Add JSON output support to r.stats.quantile (see issue [https://github.com/OSGeo/grass/pull/5951 #5951]).&lt;br /&gt;
* Add JSON output support to r.volume (see issue [https://github.com/OSGeo/grass/pull/5949 #5949]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-5 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.line (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.line''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5993 #5993])&lt;br /&gt;
* '''r.stats.quantile (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats.quantile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6007 #6007])&lt;br /&gt;
* '''r.volume (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.volume''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6036 #6036])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to m.measure (see issue [https://github.com/OSGeo/grass/pull/6006 #6006]).&lt;br /&gt;
* Add JSON output support to db.columns (see issue [https://github.com/OSGeo/grass/pull/6008 #6008]).&lt;br /&gt;
* Add JSON output support to db.connect (see issue [https://github.com/OSGeo/grass/pull/6009 #6009]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-6 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''db.columns''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6042 #6042])&lt;br /&gt;
* '''m.measure (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''m.measure''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6053 #6053])&lt;br /&gt;
* '''db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6059 #6059])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to v.db.connect (see issue [https://github.com/OSGeo/grass/pull/6014 #6014]).&lt;br /&gt;
* Add JSON output support to r.regression.multi (see issue [https://github.com/OSGeo/grass/pull/6010 #6010]).&lt;br /&gt;
* If time permits, add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* If time permits, add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-7 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.multi (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''v.db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.multi''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6075 #6075])&lt;br /&gt;
* '''v.db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6077 #6077])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* Add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
* If time permits, add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-8 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.findfile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6091 #6091])&lt;br /&gt;
* '''r3.info (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a flag-handling bug.&lt;br /&gt;
* '''r3.info''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6103 #6103])&lt;br /&gt;
* '''v.what.rast (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a sorting bug.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
* Update format to CSV instead of shell in v.category (see issue [https://github.com/OSGeo/grass/pull/6025 #6025]).&lt;br /&gt;
* Add CSV output support to r.stats (see issue [https://github.com/OSGeo/grass/issues/5835 #5835]).&lt;br /&gt;
* If time permits, add CSV output support to r.profile (see issue [https://github.com/OSGeo/grass/issues/5958 #5958]).&lt;br /&gt;
* If time permits, add CSV headers to r.volume (see issue [https://github.com/OSGeo/grass/issues/6049 #6049]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I don’t have any blockers this week. However, I’ll be a little busy with some personal work from August 3 to August 10, so I’ll try to complete next week’s tasks this week itself.&lt;br /&gt;
&lt;br /&gt;
== Week-9 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.category''': Updated format to CSV instead of shell. (See PR [https://github.com/OSGeo/grass/pull/6132 #6132])&lt;br /&gt;
* '''r.stats''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6133 #6133])&lt;br /&gt;
* '''r.volume''': Implemented CSV column headers support. (See PR [https://github.com/OSGeo/grass/pull/6134 #6134])&lt;br /&gt;
* '''v.what.rast''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6140 #6140])&lt;br /&gt;
* '''r.profile''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6145 #6145])&lt;br /&gt;
* '''r.distance (regression tests)''': Updated regression tests to ensure backward compatibility with new JSON support. (See PR [https://github.com/OSGeo/grass/pull/6150 #6150])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* I’ll be a bit busy with some personal work from August 3 to 10, so I completed next week’s tasks last week itself. I’ve already informed my mentors about my limited availability.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* Yes, I’ll be a bit busy with some personal work from August 3 to 10.&lt;br /&gt;
&lt;br /&gt;
== Week-10 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* This week I was busy with some personal work, so I did not complete any additional tasks. However, I had already finished this week’s tasks last week. This week, I mostly focused on handling reviews for those PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.distance (see issue [https://github.com/OSGeo/grass/issues/6135 #6135]).&lt;br /&gt;
* Add JSON output support to v.class (see issue [https://github.com/OSGeo/grass/issues/6136 #6136]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-11 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.distance''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6204 #6204])&lt;br /&gt;
* '''v.class''': Updated regression tests to ensure backward compatibility with new JSON support and fixed a out-of-bounds bug. (See PR [https://github.com/OSGeo/grass/pull/6205 #6205])&lt;br /&gt;
* '''v.class''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6210 #6210])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Discuss next week’s tasks with my mentors, if no issues are assigned, I’ll identify tools that currently lack JSON support and evaluate which ones are feasible to add it to.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-12 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.what''': Update JSON output format. (See PR [https://github.com/OSGeo/grass/pull/6252 #6252])&lt;br /&gt;
* Addressed review comments on my open PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
= Final Report =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Title''' || Add JSON output to different tools in C for GRASS&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo (Open Source Geospatial Foundation)]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''Program''' || Google Summer of Code 2025&lt;br /&gt;
|-&lt;br /&gt;
| '''Contributions''' || [https://github.com/OSGeo/grass/pulls?q=is%3Apr+author%3ANishantBansal2003+ Pull Requests]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
During my GSoC project, I addressed the challenge that most GRASS tools produced only plain text output, forcing users to write custom parsing code for Python-based workflows. The task was to make these tools more data-science friendly by adding structured output formats. To achieve this, I extended the use of the Parson library to implement consistent JSON output across multiple modules, refined the JSON structure introduced in the previous GSoC, and added optional support for SHELL and CSV outputs where appropriate. I developed comprehensive Python test cases, ensured backward compatibility, and provided documentation with practical examples such as loading JSON into pandas. As a result, GRASS users can now directly consume structured outputs in modern workflows, reducing parsing overhead, improving interoperability, and paving the way for broader adoption of GRASS in data science contexts.&lt;br /&gt;
&lt;br /&gt;
== The state of integration BEFORE the start of GSoC ==&lt;br /&gt;
Before the start of GSoC, the integration of GRASS with data science workflows was limited due to several challenges. The JSON outputs introduced in the previous GSoC contained deeply nested hierarchies, making them difficult to use directly with libraries such as '''pandas''' or in broader data science pipelines. While some tools already supported JSON (e.g., &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;), many important and highly demanded modules lacked JSON support, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt; and many more. This lack of consistency limited the seamless adoption of GRASS in analytics and machine learning contexts. Moreover, there was no clear '''documentation of the JSON schema''' or guidance on how to parse and utilize these outputs effectively in '''python or pandas''', which made it difficult for users to understand the use cases and integrate GRASS outputs into modern data science workflows.&lt;br /&gt;
&lt;br /&gt;
== The state of integration AFTER GSoC ==&lt;br /&gt;
&lt;br /&gt;
After GSoC, the integration state of JSON and alternative output formats in GRASS has significantly improved. I refactored the JSON structures for tools such as &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;, and others, removing unnecessary nesting introduced during the previous GSoC. This makes their outputs much easier to consume directly in &amp;lt;b&amp;gt;Python&amp;lt;/b&amp;gt; or with &amp;lt;b&amp;gt;pandas&amp;lt;/b&amp;gt;. In addition, JSON support has been extended to many essential and frequently used modules, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;, and many more. I also added detailed documentation of the JSON schema and provided examples showing how to parse and use these outputs effectively with Python and pandas. Together, these improvements make the adoption of GRASS in modern &amp;lt;b&amp;gt;data science workflows&amp;lt;/b&amp;gt; far more seamless and accessible.&lt;br /&gt;
&lt;br /&gt;
=== Enhancements made per tool ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;: Simplified JSON structure for univariate statistics, removed unnecessary hierarchy, and added new output format options (CSV, shell).&lt;br /&gt;
* &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;: Added JSON support for querying raster map colors, with a Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;: Added JSON support for reporting the current mapset, with a Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;: Updated JSON structure for raster map metadata, removing hierarchy for easier parsing. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;: Simplified JSON output for geographic region boundaries, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;: Added JSON support for GRASS version information, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;: Added JSON support for listing imagery groups, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;: Added JSON and CSV support for raster area statistics, with Python and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;: Refined JSON schema for nearest element queries, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;: Added JSON support for listing GRASS database files, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;: Updated JSON schema for printing vector attribute values, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;: Simplified JSON output, added CSV support, and included a matplotlib example for profile visualization.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;: Updated JSON schema for linear regression between rasters, with Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;: Updated JSON schema for category quantiles, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;: Added JSON support for raster volume calculations, fixed missing headers in CSV output, and provided pandas examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.columns&amp;lt;/code&amp;gt;: Added JSON output for listing database table columns, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;: Added JSON output for measuring lengths and areas, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.connect&amp;lt;/code&amp;gt;: Added JSON output for DB connection info, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.multi&amp;lt;/code&amp;gt;: Added JSON output for multiple regression between rasters, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.db.connect&amp;lt;/code&amp;gt;: Added JSON output for vector map attribute connections, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.findfile&amp;lt;/code&amp;gt;: Added JSON output for GRASS database file search, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;: Added JSON output for 3D raster map info, with Python example. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;: Added JSON output for extracting raster values at vector points, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt;: Added JSON and CSV support for locating closest points between raster objects, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;: Added JSON and CSV support for attribute data, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;: Migrated from manually written JSON to Parson-based JSON output, simplified schema, and provided Python parsing examples.&lt;br /&gt;
&lt;br /&gt;
All these changes were accompanied by regression tests to ensure that new JSON/CSV/SHELL/PLAIN output options do not break existing functionality. Additionally, I introduced comprehensive Python test cases for these outputs, making the enhancements reliable and future-proof. During this work, I also fixed several bugs in modules such as &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;, strengthening the stability of GRASS as a whole.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
To sum up, I’m glad to have met the three core objectives of my project with the constant support of my mentors:&lt;br /&gt;
&lt;br /&gt;
* Brought JSON output to several important and long-requested modules, added regression tests, and ensured reliable future test coverage.&lt;br /&gt;
* Enhanced the JSON schema introduced in last year’s GSoC by reducing unnecessary hierarchy, making it more consistent across tools, and providing Python/Pandas examples for practical use.&lt;br /&gt;
* Expanded &amp;lt;b&amp;gt;CSV&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;SHELL&amp;lt;/b&amp;gt; output formats to additional tools where they could bring value.&lt;br /&gt;
&lt;br /&gt;
This journey has been both rewarding and educational, and I’m grateful for the opportunity to contribute to GRASS through GSoC 2025. I especially want to thank &amp;lt;b&amp;gt;Anna Petrasova&amp;lt;/b&amp;gt; and the GRASS Development Team for their guidance and support. I’m excited to keep building on this work and further extend JSON and other features in the future.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
There is significant scope to extend structured output support across GRASS tools. In particular, future efforts should focus on:&lt;br /&gt;
* Expanding JSON output to additional modules, with details tracked here: [https://github.com/orgs/OSGeo/projects/10 GRASS JSON Outputs Project].&lt;br /&gt;
* Refining and standardizing the JSON schema to better support complex workflows and integrations.&lt;br /&gt;
* Exploring and implementing other output formats (e.g., SHELL, CSV, PLAIN) where they can improve usability and automation.&lt;br /&gt;
I also plan to continue contributing to GRASS by extending JSON support to more modules and engaging in community discussions around schema design and format integration.&lt;br /&gt;
&lt;br /&gt;
== Log of Pull Requests ==&lt;br /&gt;
Below is a list of pull requests submitted to the GRASS repository during GSoC 2025:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pull Request !! Description  !! Date   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5688 #5688] || r.univar: Fix JSON structure || May 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5773 #5773] || r.what.color: Add test file || May 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5775 #5775] || g.mapset: Add test file || May 26, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5784 #5784] || r.info: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;Closed&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5785 #5785] || g.region: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5810 #5810] || g.mapset: Add JSON support || June 2, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5821 #5821] || r.univar: Fix uninitialized zone_value || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5822 #5822] || r.what.color: Add JSON support || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5842 #5842] || r.info: Update test file || June 5, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5859 #5859] || r.info: Improve interface || June 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5863 #5863] || g.version: Add JSON support || June 9, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5870 #5870] || i.group: Add JSON support || June 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5879 #5879] || r.stats: Add test file || June 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5892 #5892] || r.stats: Add tests for JSON output || June 14, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5898 #5898] || v.distance: Update JSON format || June 16, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5900 #5900] || r.stats: fix uninitialised window value || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5906 #5906] || g.list: Add test file || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5921 #5921] || g.list: Add JSON support || June 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5929 #5929] || g.region: Update JSON format || June 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5946 #5946] || v.to.db: Update JSON format || June 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5962 #5962] || r.profile: Update JSON format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5966 #5966] || r.univar: Add shell and CSV format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5990 #5990] || r.regression.line: Add test file || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5993 #5993] || r.regression.line: Add JSON support || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6002 #6002] || r.stats.quantile: Add test file || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6007 #6007] || r.stats.quantile: Add JSON support || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6027 #6027] || r.volume: Add test file || July 4, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6036 #6036] || r.volume: Add JSON support || July 6, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6042 #6042] || db.columns: Add JSON support || July 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6051 #6051] || m.measure: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6052 #6052] || db.connect: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6053 #6053] || m.measure: Add JSON support || July 11, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6059 #6059] || db.connect: Add JSON support || July 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6066 #6066] || r.regression.multi: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6067 #6067] || v.db.connect: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6075 #6075] || r.regression.multi: Add JSON support || July 18, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6077 #6077] || v.db.connect: Add JSON support || July 19, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6091 #6091] || g.findfile: Add JSON support || July 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6098 #6098] || r3.info: Add test file || July 22, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6103 #6103] || r3.info: Add JSON support || July 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6109 #6109] || v.what.rast: Add test file || July 24, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6132 #6132] || v.category: Use CSV format instead of shell format || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6133 #6133] || r.stats: add CSV support || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6134 #6134] || r.volume: add csv column headers || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6140 #6140] || v.what.rast: Add JSON support || July 29, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6145 #6145] || r.profile: Add CSV support || July 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6150 #6150] || r.distance: Update existing test cases || August 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6204 #6204] || r.distance: Add JSON and CSV support || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6205 #6205] || v.class: Add more test cases and fix out-of-bounds bug || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6210 #6210] || v.class: Add JSON and CSV support || August 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6252 #6252] || v.what: Update JSON output format || August 23, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Additional Links ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Ttile&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| OSGeo Wiki Page&lt;br /&gt;
| [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C Add JSON output to different tools in C for GRASS]&lt;br /&gt;
|-&lt;br /&gt;
| Github Fork&lt;br /&gt;
| [https://github.com/NishantBansal2003/grass GitHub Fork]&lt;br /&gt;
|-&lt;br /&gt;
| GSoC Page&lt;br /&gt;
| [https://summerofcode.withgoogle.com/programs/2025/projects/GPVGd3DH Link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples &amp;amp; Images ==&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; JSON output in Python ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; can be directly loaded into a pandas DataFrame and used for plotting with matplotlib.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
# Run r.profile command&lt;br /&gt;
elevation = gs.read_command(&lt;br /&gt;
    &amp;quot;r.profile&amp;quot;,&lt;br /&gt;
    input=&amp;quot;elevation&amp;quot;,&lt;br /&gt;
    coordinates=&amp;quot;641712,226095,641546,224138,641546,222048,641049,221186&amp;quot;,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
    flags=&amp;quot;gc&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Load the JSON data into a dataframe&lt;br /&gt;
df = pd.read_json(elevation)&lt;br /&gt;
print(df)&lt;br /&gt;
&lt;br /&gt;
# Create the scatter plot&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
plt.scatter(df[&amp;quot;distance&amp;quot;], df[&amp;quot;value&amp;quot;], c=df[&amp;quot;color&amp;quot;], marker=&amp;quot;o&amp;quot;)&lt;br /&gt;
plt.title(&amp;quot;Profile of Distance vs. Elevation with Color Coding&amp;quot;)&lt;br /&gt;
plt.xlabel(&amp;quot;Distance (meters)&amp;quot;)&lt;br /&gt;
plt.ylabel(&amp;quot;Elevation&amp;quot;)&lt;br /&gt;
plt.grid(True)&lt;br /&gt;
plt.show()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame Output (first 10 rows) ====  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
         easting       northing   distance      value    color&lt;br /&gt;
0  641712.000000  226095.000000   0.000000  84.661507  #71FF00&lt;br /&gt;
1  641711.154826  226085.036106   9.999675  84.511765  #6FFF00&lt;br /&gt;
2  641710.309651  226075.072213  19.999349  84.241806  #6BFF00&lt;br /&gt;
3  641709.464477  226065.108319  29.999024  84.304214  #6CFF00&lt;br /&gt;
4  641708.619302  226055.144426  39.998699  84.174400  #6AFF00&lt;br /&gt;
5  641707.774128  226045.180532  49.998374  84.112534  #6AFF00&lt;br /&gt;
6  641706.928954  226035.216639  59.998048  84.011208  #68FF00&lt;br /&gt;
7  641706.083779  226025.252745  69.997723  83.834084  #66FF00&lt;br /&gt;
8  641705.238605  226015.288851  79.997398  83.870193  #67FF00&lt;br /&gt;
9  641704.393430  226005.324958  89.997073  84.194908  #6BFF00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Visualization ====  &lt;br /&gt;
&lt;br /&gt;
Matplotlib scatter plot generated from the &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; JSON output: &lt;br /&gt;
&lt;br /&gt;
[[File:R profile plot.png]]&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt; can be directly loaded into a pandas DataFrame.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.class&amp;quot;,&lt;br /&gt;
    map=&amp;quot;bridges&amp;quot;,&lt;br /&gt;
    column=&amp;quot;YEAR_BUILT&amp;quot;,&lt;br /&gt;
    algorithm=&amp;quot;std&amp;quot;,&lt;br /&gt;
    nbclasses=5,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data[&amp;quot;intervals&amp;quot;])&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output (intervals) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
          from           to  frequency&lt;br /&gt;
0  1891.000000  1938.829689        750&lt;br /&gt;
1  1938.829689  1954.722836       1841&lt;br /&gt;
2  1954.722836  1970.615983       5556&lt;br /&gt;
3  1970.615983  1986.509130       1788&lt;br /&gt;
4  1986.509130  1997.000000       1003&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame to display categories and values.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.what.rast&amp;quot;, map=&amp;quot;bridges&amp;quot;, raster=&amp;quot;elevation&amp;quot;, flags=&amp;quot;p&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    category       value&lt;br /&gt;
0       4635   86.851212&lt;br /&gt;
1       4648   87.883255&lt;br /&gt;
2       4688  103.382004&lt;br /&gt;
3       4709   67.387856&lt;br /&gt;
4       4986   90.972832&lt;br /&gt;
5       4991   86.550629&lt;br /&gt;
6       5027   84.256355&lt;br /&gt;
7       5060   79.500443&lt;br /&gt;
8       5071   78.732864&lt;br /&gt;
9       5089   85.703636&lt;br /&gt;
10      5096  115.967323&lt;br /&gt;
11      5130   81.055870&lt;br /&gt;
12      5150   92.812927&lt;br /&gt;
13      5166   88.149483&lt;br /&gt;
14      5184   76.426331&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test Suite Update ====&lt;br /&gt;
Added 6 tests to the test suite, including both regression tests and future-proof tests to ensure functionality remains reliable in future updates.&lt;br /&gt;
&lt;br /&gt;
[[File:V what rast test file.png|700px]]&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame to locate closest points.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
&lt;br /&gt;
result = gs.parse_command(&lt;br /&gt;
    &amp;quot;r.distance&amp;quot;, map=[&amp;quot;zipcodes&amp;quot;, &amp;quot;lakes&amp;quot;], flags=&amp;quot;l&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
df = pd.json_normalize(result)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output (first 10 rows, truncated) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
       distance  from_cell.category  from_cell.easting  ...  to_cell.easting to_cell.northing  to_cell.label&lt;br /&gt;
0  11158.507466               27511      632604.951740  ...    640584.676990    215499.220687       Dam/Weir&lt;br /&gt;
1   1037.271198               27511      631734.981693  ...    632314.961724    221839.026534      Lake/Pond&lt;br /&gt;
2   2276.988836               27511      630015.040913  ...    630765.015090    219459.099418      Reservoir&lt;br /&gt;
3  14614.155031               27513      631055.005106  ...    640584.676990    215499.220687       Dam/Weir&lt;br /&gt;
4   3635.876453               27513      631674.983759  ...    635164.863600    227198.862392      Lake/Pond&lt;br /&gt;
5   6971.335517               27513      630005.041257  ...    630765.015090    219459.099418      Reservoir&lt;br /&gt;
6   8978.927486               27518      632134.967922  ...    640424.682499    215209.229568       Dam/Weir&lt;br /&gt;
7      0.000000               27518      630005.041257  ...    630005.041257    220199.076757      Lake/Pond&lt;br /&gt;
8    699.975899               27518      630005.041257  ...    630705.017156    219379.101868      Reservoir&lt;br /&gt;
9    509.197766               27529      641154.657366  ...    640674.673892    215249.228343       Dam/Weir&lt;br /&gt;
&lt;br /&gt;
[10 rows x 9 columns]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.distance&amp;quot;,&lt;br /&gt;
    flags=&amp;quot;p&amp;quot;,&lt;br /&gt;
    from_=&amp;quot;busroute_a&amp;quot;,&lt;br /&gt;
    to=&amp;quot;busstopsall&amp;quot;,&lt;br /&gt;
    upload=&amp;quot;dist,to_attr&amp;quot;,&lt;br /&gt;
    to_column=&amp;quot;routes&amp;quot;,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
   from_cat  to_cat      dist to_attr&lt;br /&gt;
0         1     112  0.142812     8,A&lt;br /&gt;
1         2      44  0.102327     9,A&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;r.volume&amp;quot;, input=&amp;quot;elevation&amp;quot;, clump=&amp;quot;geology_30m&amp;quot;, flags=&amp;quot;p&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    category  average         sum   cells        volume  easting  northing&lt;br /&gt;
0        217   118.93 86288827.99  725562 8628882798.63   635325    221535&lt;br /&gt;
1        262   108.97 21650560.37  198684 2165056037.02   638935    222495&lt;br /&gt;
2        270    92.23 63578874.44  689373 6357887443.53   642405    221485&lt;br /&gt;
3        405   132.96 33732662.09  253710 3373266208.59   631835    224095&lt;br /&gt;
4        583   139.35  3011288.22   21609  301128821.55   630205    224665&lt;br /&gt;
5        720   124.30   599618.16    4824   59961816.06   634075    227995&lt;br /&gt;
6        766   132.43   936791.20    7074   93679120.08   631425    227845&lt;br /&gt;
7        862   118.31  7302317.47   61722  730231746.74   630505    218885&lt;br /&gt;
8        910    94.20  4235816.13   44964  423581613.11   639215    216365&lt;br /&gt;
9        921   135.22  1693985.23   12528  169398523.05   630755    215445&lt;br /&gt;
10       945   127.24     1145.12       9     114512.03   630015    215015&lt;br /&gt;
11       946    89.91   365748.34    4068   36574833.85   639085    215255&lt;br /&gt;
12       948   129.02   112631.82     873   11263181.57   630185    215115&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test Suite Update ====&lt;br /&gt;
&lt;br /&gt;
Added 4 tests to the test suite, including both regression tests and future-proof tests to ensure functionality remains reliable in future updates.&lt;br /&gt;
&lt;br /&gt;
[[File:Test cmd 2.png|600px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Test cmd output.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{GSoC}}&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28684</id>
		<title>GRASS GSoC 2025 Add JSON output to different tools in C</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28684"/>
		<updated>2025-08-24T08:00:00Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: /* Using r.volume JSON output with Pandas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Nishant Bansal&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo - Open Source Geospatial Foundation]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/NishantBansal2003/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''GSoC proposal''' || [https://docs.google.com/document/d/1ZPQ9RXU7b_RUDmBmAMeK7ZjFAV1WC7Urd1Zlz678jyw/edit?tab=t.0#heading=h.z6ne0og04bp5 View Proposal]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Abstract =&lt;br /&gt;
Currently, most GRASS tools produce data in plain text by default. This means that users who want to process the output in Python need to create custom parsing code. To make this easier, several modules could be improved by oﬀering JSON as an alternative output format. Recently, the Parson library was added to the GRASS codebase to support JSON output in addition to plain text. Building on the advancements made during the last GSoC, my project aims to expand JSON output capabilities to more tools using the Parson library. I will also work on making the JSON structure introduced in the previous GSoC more useful and consistent. Additionally, I plan to add support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
&lt;br /&gt;
# Working with mentors to finalize the structure of the JSON output.&lt;br /&gt;
# Adding an option to choose the output format (plain text or JSON) for each updated tool.&lt;br /&gt;
# Make the JSON structure introduced during the last GSoC more useful and consistent across tools.&lt;br /&gt;
# Developing Python test cases to ensure that the JSON output works correctly and to avoid future issues.&lt;br /&gt;
# Providing basic documentation and example JSON outputs for each modified tool.&lt;br /&gt;
# Adding support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
# Develop simple examples demonstrating how to use JSON output in a data science workflow, such as reading JSON data into pandas or python.&lt;br /&gt;
&lt;br /&gt;
= Timeline =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Period !! Timeline  !! Tasks   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period &lt;br /&gt;
||&lt;br /&gt;
May 8 - June 1  &lt;br /&gt;
|| &lt;br /&gt;
# Reviewed the work done during the last GSoC to stabilize the JSON output.&lt;br /&gt;
# Discussed the priority tools for adding JSON support.&lt;br /&gt;
# Read GRASS documentation to add Python and JSON examples to the documentation.&lt;br /&gt;
|| &lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;13&amp;quot; | Official Coding Period &lt;br /&gt;
|-&lt;br /&gt;
| '''Week 1''' (June 2 - June 8) || &lt;br /&gt;
# Add JSON support for g.mapset [https://github.com/OSGeo/grass/pull/5810 #5810]&lt;br /&gt;
# Fix uninitialized zone_value in r.univar [https://github.com/OSGeo/grass/pull/5821 #5821]&lt;br /&gt;
# Add JSON support for r.what.color [https://github.com/OSGeo/grass/pull/5822 #5822]&lt;br /&gt;
# Update test file in r.info [https://github.com/OSGeo/grass/pull/5842 #5842]&lt;br /&gt;
# Improve interface for r.info [https://github.com/OSGeo/grass/pull/5859 #5859]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 2''' (June 9 - June 15) ||&lt;br /&gt;
# Add JSON support for g.version [https://github.com/OSGeo/grass/pull/5863 #5863]&lt;br /&gt;
# Add JSON support for i.group [https://github.com/OSGeo/grass/pull/5870 #5870]&lt;br /&gt;
# Add test file in r.stats [https://github.com/OSGeo/grass/pull/5879 #5879]&lt;br /&gt;
# Add tests for JSON output in r.stats [https://github.com/OSGeo/grass/pull/5892 #5892]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 3''' (June 16 - June 22) ||&lt;br /&gt;
# Update the JSON output schema of v.distance [https://github.com/OSGeo/grass/pull/5898 #5898]&lt;br /&gt;
# Fix uninitialized window variable in r.stats [https://github.com/OSGeo/grass/pull/5900 #5900]&lt;br /&gt;
# Add test file in g.list [https://github.com/OSGeo/grass/pull/5906 #5906]&lt;br /&gt;
# Add JSON support for g.list [https://github.com/OSGeo/grass/pull/5921 #5921]&lt;br /&gt;
# Update the JSON output schema of g.region [https://github.com/OSGeo/grass/pull/5929 #5929]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 4''' (June 23 - June 29) ||&lt;br /&gt;
# Update the JSON output schema of v.to.db [https://github.com/OSGeo/grass/pull/5946 #5946]&lt;br /&gt;
# Update the JSON output schema of r.profile [https://github.com/OSGeo/grass/pull/5962 #5962]&lt;br /&gt;
# Add SHELL and CSV output support for r.univar [https://github.com/OSGeo/grass/pull/5966 #5966]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 5''' (June 30 - July 6) ||&lt;br /&gt;
# Add test file in r.regression.line [https://github.com/OSGeo/grass/pull/5990 #5990]&lt;br /&gt;
# Add JSON support for r.regression.line [https://github.com/OSGeo/grass/pull/5993 #5993]&lt;br /&gt;
# Add test file in r.stats.quantile [https://github.com/OSGeo/grass/pull/6002 #6002]&lt;br /&gt;
# Add JSON support for r.stats.quantile [https://github.com/OSGeo/grass/pull/6007 #6007]&lt;br /&gt;
# Add test file in r.volume [https://github.com/OSGeo/grass/pull/6027 #6027]&lt;br /&gt;
# Add JSON support for r.volume [https://github.com/OSGeo/grass/pull/6036 #6036]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 6''' (July 7 - July 13) ||&lt;br /&gt;
# Add JSON support for db.columns [https://github.com/OSGeo/grass/pull/6042 #6042]&lt;br /&gt;
# Add test file in m.measure [https://github.com/OSGeo/grass/pull/6051 #6051]&lt;br /&gt;
# Add test file in db.connect [https://github.com/OSGeo/grass/pull/6052 #6052]&lt;br /&gt;
# Add JSON support for m.measure [https://github.com/OSGeo/grass/pull/6053 #6053]&lt;br /&gt;
# Add JSON support for db.connect [https://github.com/OSGeo/grass/pull/6059 #6059]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | '''Week 7''' (July 14 - July 20) ||&lt;br /&gt;
# Add test file in r.regression.multi [https://github.com/OSGeo/grass/pull/6066 #6066]&lt;br /&gt;
# Add test file in v.db.connect [https://github.com/OSGeo/grass/pull/6067 #6067]&lt;br /&gt;
# Add JSON support for r.regression.multi [https://github.com/OSGeo/grass/pull/6075 #6075]&lt;br /&gt;
# Add JSON support for v.db.connect [https://github.com/OSGeo/grass/pull/6077 #6077]&lt;br /&gt;
# Submit MidTerm evaluation.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 8''' (July 21 - July 27) ||&lt;br /&gt;
# Add JSON support for g.findfile [https://github.com/OSGeo/grass/pull/6091 #6091]&lt;br /&gt;
# Add test file in r3.info [https://github.com/OSGeo/grass/pull/6098 #6098]&lt;br /&gt;
# Add JSON support for r3.info [https://github.com/OSGeo/grass/pull/6103 #6103]&lt;br /&gt;
# Add test file in v.what.rast [https://github.com/OSGeo/grass/pull/6109 #6109]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 9''' (July 28 - August 3) ||&lt;br /&gt;
# Update format to CSV instead of shell in v.category [https://github.com/OSGeo/grass/pull/6132 #6132]&lt;br /&gt;
# Add CSV output support to r.stats [https://github.com/OSGeo/grass/pull/6133 #6133]&lt;br /&gt;
# Add CSV headers to r.volume [https://github.com/OSGeo/grass/pull/6134 #6134]&lt;br /&gt;
# Add JSON support for v.what.rast [https://github.com/OSGeo/grass/pull/6140 #6140]&lt;br /&gt;
# Add CSV output support to r.profile [https://github.com/OSGeo/grass/pull/6145 #6145]&lt;br /&gt;
# Update test cases in r.distance [https://github.com/OSGeo/grass/pull/6150 #6150]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 10''' (August 4 - August 10) ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 11''' (August 11 - August 17) ||&lt;br /&gt;
# Add JSON and CSV support for r.distance [https://github.com/OSGeo/grass/pull/6204 #6204]&lt;br /&gt;
# Add more test cases in v.class [https://github.com/OSGeo/grass/pull/6205 #6205]&lt;br /&gt;
# Add JSON and CSV support for v.class [https://github.com/OSGeo/grass/pull/6210 #6210]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 12''' (August 18 - August 24) ||&lt;br /&gt;
# Update JSON output format for v.what [https://github.com/OSGeo/grass/pull/6252 #6252]&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Evaluation Period &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | August 25 - September 1 ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
# Submit code, final evaluation and write the final GSoC report.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Reports =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* Introduced myself on the [https://discourse.osgeo.org/t/gsoc-2025-introduction-nishant-bansal/147005 OSGeo Discourse mailing list].&lt;br /&gt;
* Created both my [https://wiki.osgeo.org/wiki/User:Nishantbansal2003 personal Wiki page] and the [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C project Wiki page], adding all necessary project-related information.&lt;br /&gt;
* Read GRASS documentation to support the addition of Python and JSON examples.&lt;br /&gt;
* Worked on the following pull requests:&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5688 #5688]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5773 #5773]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5775 #5775]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5784 #5784]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5785 #5785]&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to the g.mapset and r.what.color modules.&lt;br /&gt;
* If time permits, I will begin improving the r.info interface: [https://github.com/OSGeo/grass/issues/5793 Issue #5793]&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
'''Project Discussions and Meetings'''&lt;br /&gt;
* '''14 May 2025''': Introductory meeting discussing JSON support and overall project milestones.&lt;br /&gt;
* '''21 May 2025''': Introduction with fellow developers. Discussed priority tools, adding Python/Pandas examples, and approaches for finalizing the JSON schema for each module.&lt;br /&gt;
&lt;br /&gt;
== Week-1 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.mapset''': Added JSON output support, now you can use -p and -l flags to get JSON-formatted results.&lt;br /&gt;
* '''r.univar''': Fixed a bug causing an uninitialized zone_value.&lt;br /&gt;
* '''r.what.color''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5822 #5822])&lt;br /&gt;
* '''r.info (regression tests)''': To maintain backward compatibility while updating its interface, I added strong regression tests.&lt;br /&gt;
* '''r.info (interface improvements)''': Began improving the module’s interface. (See PR [https://github.com/OSGeo/grass/pull/5859 #5859])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.version (see issue [https://github.com/OSGeo/grass/issues/5816 #5816]).&lt;br /&gt;
* Add JSON output support to i.group (see issue [https://github.com/OSGeo/grass/issues/5815 #5815]).&lt;br /&gt;
* If time permits, write tests for r.stats (see issue [https://github.com/OSGeo/grass/issues/5814 #5814]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-2 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.version''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5863 #5863])&lt;br /&gt;
* '''i.group''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5870 #5870])&lt;br /&gt;
* '''r.stats (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats''': Added tests for JSON output; this uncovered a bug, which was fixed alongside.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.distance (see issue [https://github.com/OSGeo/grass/issues/5846 #5846]).&lt;br /&gt;
* Add JSON output support to g.list (see issue [https://github.com/OSGeo/grass/issues/5848 #5848]).&lt;br /&gt;
* If time permits, fix the JSON output format of g.region (see issue [https://github.com/OSGeo/grass/issues/5828 #5828]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-3 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.distance''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5898 #5898])&lt;br /&gt;
* '''r.stats''': Fixed a bug causing an uninitialized &amp;lt;code&amp;gt;window&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
* '''g.list (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''g.list''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5921 #5921])&lt;br /&gt;
* '''g.region''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5929 #5929])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.to.db (see issue [https://github.com/OSGeo/grass/pull/5711 #5711]).&lt;br /&gt;
* Update JSON output format and documentation of r.profile (see issue [https://github.com/OSGeo/grass/pull/5834 #5834]).&lt;br /&gt;
* If time permits, add shell and csv output formats to r.univar (see issue [https://github.com/OSGeo/grass/pull/5824 #5824]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-4 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.to.db''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5946 #5946])&lt;br /&gt;
* '''r.profile''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5962 #5962])&lt;br /&gt;
* '''r.univar''': Implemented SHELL and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/5966 #5966])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.regression.line (see issue [https://github.com/OSGeo/grass/pull/5950 #5950]).&lt;br /&gt;
* Add JSON output support to r.stats.quantile (see issue [https://github.com/OSGeo/grass/pull/5951 #5951]).&lt;br /&gt;
* Add JSON output support to r.volume (see issue [https://github.com/OSGeo/grass/pull/5949 #5949]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-5 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.line (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.line''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5993 #5993])&lt;br /&gt;
* '''r.stats.quantile (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats.quantile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6007 #6007])&lt;br /&gt;
* '''r.volume (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.volume''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6036 #6036])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to m.measure (see issue [https://github.com/OSGeo/grass/pull/6006 #6006]).&lt;br /&gt;
* Add JSON output support to db.columns (see issue [https://github.com/OSGeo/grass/pull/6008 #6008]).&lt;br /&gt;
* Add JSON output support to db.connect (see issue [https://github.com/OSGeo/grass/pull/6009 #6009]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-6 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''db.columns''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6042 #6042])&lt;br /&gt;
* '''m.measure (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''m.measure''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6053 #6053])&lt;br /&gt;
* '''db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6059 #6059])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to v.db.connect (see issue [https://github.com/OSGeo/grass/pull/6014 #6014]).&lt;br /&gt;
* Add JSON output support to r.regression.multi (see issue [https://github.com/OSGeo/grass/pull/6010 #6010]).&lt;br /&gt;
* If time permits, add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* If time permits, add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-7 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.multi (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''v.db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.multi''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6075 #6075])&lt;br /&gt;
* '''v.db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6077 #6077])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* Add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
* If time permits, add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-8 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.findfile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6091 #6091])&lt;br /&gt;
* '''r3.info (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a flag-handling bug.&lt;br /&gt;
* '''r3.info''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6103 #6103])&lt;br /&gt;
* '''v.what.rast (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a sorting bug.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
* Update format to CSV instead of shell in v.category (see issue [https://github.com/OSGeo/grass/pull/6025 #6025]).&lt;br /&gt;
* Add CSV output support to r.stats (see issue [https://github.com/OSGeo/grass/issues/5835 #5835]).&lt;br /&gt;
* If time permits, add CSV output support to r.profile (see issue [https://github.com/OSGeo/grass/issues/5958 #5958]).&lt;br /&gt;
* If time permits, add CSV headers to r.volume (see issue [https://github.com/OSGeo/grass/issues/6049 #6049]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I don’t have any blockers this week. However, I’ll be a little busy with some personal work from August 3 to August 10, so I’ll try to complete next week’s tasks this week itself.&lt;br /&gt;
&lt;br /&gt;
== Week-9 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.category''': Updated format to CSV instead of shell. (See PR [https://github.com/OSGeo/grass/pull/6132 #6132])&lt;br /&gt;
* '''r.stats''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6133 #6133])&lt;br /&gt;
* '''r.volume''': Implemented CSV column headers support. (See PR [https://github.com/OSGeo/grass/pull/6134 #6134])&lt;br /&gt;
* '''v.what.rast''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6140 #6140])&lt;br /&gt;
* '''r.profile''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6145 #6145])&lt;br /&gt;
* '''r.distance (regression tests)''': Updated regression tests to ensure backward compatibility with new JSON support. (See PR [https://github.com/OSGeo/grass/pull/6150 #6150])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* I’ll be a bit busy with some personal work from August 3 to 10, so I completed next week’s tasks last week itself. I’ve already informed my mentors about my limited availability.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* Yes, I’ll be a bit busy with some personal work from August 3 to 10.&lt;br /&gt;
&lt;br /&gt;
== Week-10 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* This week I was busy with some personal work, so I did not complete any additional tasks. However, I had already finished this week’s tasks last week. This week, I mostly focused on handling reviews for those PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.distance (see issue [https://github.com/OSGeo/grass/issues/6135 #6135]).&lt;br /&gt;
* Add JSON output support to v.class (see issue [https://github.com/OSGeo/grass/issues/6136 #6136]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-11 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.distance''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6204 #6204])&lt;br /&gt;
* '''v.class''': Updated regression tests to ensure backward compatibility with new JSON support and fixed a out-of-bounds bug. (See PR [https://github.com/OSGeo/grass/pull/6205 #6205])&lt;br /&gt;
* '''v.class''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6210 #6210])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Discuss next week’s tasks with my mentors, if no issues are assigned, I’ll identify tools that currently lack JSON support and evaluate which ones are feasible to add it to.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-12 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.what''': Update JSON output format. (See PR [https://github.com/OSGeo/grass/pull/6252 #6252])&lt;br /&gt;
* Addressed review comments on my open PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
= Final Report =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Title''' || Add JSON output to different tools in C for GRASS&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo (Open Source Geospatial Foundation)]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''Program''' || Google Summer of Code 2025&lt;br /&gt;
|-&lt;br /&gt;
| '''Contributions''' || [https://github.com/OSGeo/grass/pulls?q=is%3Apr+author%3ANishantBansal2003+ Pull Requests]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
During my GSoC project, I addressed the challenge that most GRASS tools produced only plain text output, forcing users to write custom parsing code for Python-based workflows. The task was to make these tools more data-science friendly by adding structured output formats. To achieve this, I extended the use of the Parson library to implement consistent JSON output across multiple modules, refined the JSON structure introduced in the previous GSoC, and added optional support for SHELL and CSV outputs where appropriate. I developed comprehensive Python test cases, ensured backward compatibility, and provided documentation with practical examples such as loading JSON into pandas. As a result, GRASS users can now directly consume structured outputs in modern workflows, reducing parsing overhead, improving interoperability, and paving the way for broader adoption of GRASS in data science contexts.&lt;br /&gt;
&lt;br /&gt;
== The state of integration BEFORE the start of GSoC ==&lt;br /&gt;
Before the start of GSoC, the integration of GRASS with data science workflows was limited due to several challenges. The JSON outputs introduced in the previous GSoC contained deeply nested hierarchies, making them difficult to use directly with libraries such as '''pandas''' or in broader data science pipelines. While some tools already supported JSON (e.g., &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;), many important and highly demanded modules lacked JSON support, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt; and many more. This lack of consistency limited the seamless adoption of GRASS in analytics and machine learning contexts. Moreover, there was no clear '''documentation of the JSON schema''' or guidance on how to parse and utilize these outputs effectively in '''python or pandas''', which made it difficult for users to understand the use cases and integrate GRASS outputs into modern data science workflows.&lt;br /&gt;
&lt;br /&gt;
== The state of integration AFTER GSoC ==&lt;br /&gt;
&lt;br /&gt;
After GSoC, the integration state of JSON and alternative output formats in GRASS has significantly improved. I refactored the JSON structures for tools such as &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;, and others, removing unnecessary nesting introduced during the previous GSoC. This makes their outputs much easier to consume directly in &amp;lt;b&amp;gt;Python&amp;lt;/b&amp;gt; or with &amp;lt;b&amp;gt;pandas&amp;lt;/b&amp;gt;. In addition, JSON support has been extended to many essential and frequently used modules, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;, and many more. I also added detailed documentation of the JSON schema and provided examples showing how to parse and use these outputs effectively with Python and pandas. Together, these improvements make the adoption of GRASS in modern &amp;lt;b&amp;gt;data science workflows&amp;lt;/b&amp;gt; far more seamless and accessible.&lt;br /&gt;
&lt;br /&gt;
=== Enhancements made per tool ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;: Simplified JSON structure for univariate statistics, removed unnecessary hierarchy, and added new output format options (CSV, shell).&lt;br /&gt;
* &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;: Added JSON support for querying raster map colors, with a Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;: Added JSON support for reporting the current mapset, with a Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;: Updated JSON structure for raster map metadata, removing hierarchy for easier parsing. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;: Simplified JSON output for geographic region boundaries, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;: Added JSON support for GRASS version information, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;: Added JSON support for listing imagery groups, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;: Added JSON and CSV support for raster area statistics, with Python and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;: Refined JSON schema for nearest element queries, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;: Added JSON support for listing GRASS database files, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;: Updated JSON schema for printing vector attribute values, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;: Simplified JSON output, added CSV support, and included a matplotlib example for profile visualization.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;: Updated JSON schema for linear regression between rasters, with Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;: Updated JSON schema for category quantiles, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;: Added JSON support for raster volume calculations, fixed missing headers in CSV output, and provided pandas examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.columns&amp;lt;/code&amp;gt;: Added JSON output for listing database table columns, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;: Added JSON output for measuring lengths and areas, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.connect&amp;lt;/code&amp;gt;: Added JSON output for DB connection info, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.multi&amp;lt;/code&amp;gt;: Added JSON output for multiple regression between rasters, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.db.connect&amp;lt;/code&amp;gt;: Added JSON output for vector map attribute connections, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.findfile&amp;lt;/code&amp;gt;: Added JSON output for GRASS database file search, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;: Added JSON output for 3D raster map info, with Python example. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;: Added JSON output for extracting raster values at vector points, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt;: Added JSON and CSV support for locating closest points between raster objects, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;: Added JSON and CSV support for attribute data, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;: Migrated from manually written JSON to Parson-based JSON output, simplified schema, and provided Python parsing examples.&lt;br /&gt;
&lt;br /&gt;
All these changes were accompanied by regression tests to ensure that new JSON/CSV/SHELL/PLAIN output options do not break existing functionality. Additionally, I introduced comprehensive Python test cases for these outputs, making the enhancements reliable and future-proof. During this work, I also fixed several bugs in modules such as &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;, strengthening the stability of GRASS as a whole.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
To sum up, I’m glad to have met the three core objectives of my project with the constant support of my mentors:&lt;br /&gt;
&lt;br /&gt;
* Brought JSON output to several important and long-requested modules, added regression tests, and ensured reliable future test coverage.&lt;br /&gt;
* Enhanced the JSON schema introduced in last year’s GSoC by reducing unnecessary hierarchy, making it more consistent across tools, and providing Python/Pandas examples for practical use.&lt;br /&gt;
* Expanded &amp;lt;b&amp;gt;CSV&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;SHELL&amp;lt;/b&amp;gt; output formats to additional tools where they could bring value.&lt;br /&gt;
&lt;br /&gt;
This journey has been both rewarding and educational, and I’m grateful for the opportunity to contribute to GRASS through GSoC 2025. I especially want to thank &amp;lt;b&amp;gt;Anna Petrasova&amp;lt;/b&amp;gt; and the GRASS Development Team for their guidance and support. I’m excited to keep building on this work and further extend JSON and other features in the future.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
There is significant scope to extend structured output support across GRASS tools. In particular, future efforts should focus on:&lt;br /&gt;
* Expanding JSON output to additional modules, with details tracked here: [https://github.com/orgs/OSGeo/projects/10 GRASS JSON Outputs Project].&lt;br /&gt;
* Refining and standardizing the JSON schema to better support complex workflows and integrations.&lt;br /&gt;
* Exploring and implementing other output formats (e.g., SHELL, CSV, PLAIN) where they can improve usability and automation.&lt;br /&gt;
I also plan to continue contributing to GRASS by extending JSON support to more modules and engaging in community discussions around schema design and format integration.&lt;br /&gt;
&lt;br /&gt;
== Log of Pull Requests ==&lt;br /&gt;
Below is a list of pull requests submitted to the GRASS repository during GSoC 2025:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pull Request !! Description  !! Date   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5688 #5688] || r.univar: Fix JSON structure || May 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5773 #5773] || r.what.color: Add test file || May 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5775 #5775] || g.mapset: Add test file || May 26, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5784 #5784] || r.info: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;Closed&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5785 #5785] || g.region: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5810 #5810] || g.mapset: Add JSON support || June 2, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5821 #5821] || r.univar: Fix uninitialized zone_value || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5822 #5822] || r.what.color: Add JSON support || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5842 #5842] || r.info: Update test file || June 5, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5859 #5859] || r.info: Improve interface || June 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5863 #5863] || g.version: Add JSON support || June 9, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5870 #5870] || i.group: Add JSON support || June 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5879 #5879] || r.stats: Add test file || June 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5892 #5892] || r.stats: Add tests for JSON output || June 14, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5898 #5898] || v.distance: Update JSON format || June 16, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5900 #5900] || r.stats: fix uninitialised window value || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5906 #5906] || g.list: Add test file || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5921 #5921] || g.list: Add JSON support || June 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5929 #5929] || g.region: Update JSON format || June 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5946 #5946] || v.to.db: Update JSON format || June 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5962 #5962] || r.profile: Update JSON format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5966 #5966] || r.univar: Add shell and CSV format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5990 #5990] || r.regression.line: Add test file || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5993 #5993] || r.regression.line: Add JSON support || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6002 #6002] || r.stats.quantile: Add test file || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6007 #6007] || r.stats.quantile: Add JSON support || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6027 #6027] || r.volume: Add test file || July 4, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6036 #6036] || r.volume: Add JSON support || July 6, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6042 #6042] || db.columns: Add JSON support || July 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6051 #6051] || m.measure: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6052 #6052] || db.connect: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6053 #6053] || m.measure: Add JSON support || July 11, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6059 #6059] || db.connect: Add JSON support || July 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6066 #6066] || r.regression.multi: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6067 #6067] || v.db.connect: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6075 #6075] || r.regression.multi: Add JSON support || July 18, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6077 #6077] || v.db.connect: Add JSON support || July 19, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6091 #6091] || g.findfile: Add JSON support || July 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6098 #6098] || r3.info: Add test file || July 22, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6103 #6103] || r3.info: Add JSON support || July 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6109 #6109] || v.what.rast: Add test file || July 24, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6132 #6132] || v.category: Use CSV format instead of shell format || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6133 #6133] || r.stats: add CSV support || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6134 #6134] || r.volume: add csv column headers || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6140 #6140] || v.what.rast: Add JSON support || July 29, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6145 #6145] || r.profile: Add CSV support || July 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6150 #6150] || r.distance: Update existing test cases || August 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6204 #6204] || r.distance: Add JSON and CSV support || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6205 #6205] || v.class: Add more test cases and fix out-of-bounds bug || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6210 #6210] || v.class: Add JSON and CSV support || August 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6252 #6252] || v.what: Update JSON output format || August 23, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Additional Links ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Ttile&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| OSGeo Wiki Page&lt;br /&gt;
| [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C Add JSON output to different tools in C for GRASS]&lt;br /&gt;
|-&lt;br /&gt;
| Github Fork&lt;br /&gt;
| [https://github.com/NishantBansal2003/grass GitHub Fork]&lt;br /&gt;
|-&lt;br /&gt;
| GSoC Page&lt;br /&gt;
| [https://summerofcode.withgoogle.com/programs/2025/projects/GPVGd3DH Link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples &amp;amp; Images ==&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; JSON output in Python ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; can be directly loaded into a pandas DataFrame and used for plotting with matplotlib.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
# Run r.profile command&lt;br /&gt;
elevation = gs.read_command(&lt;br /&gt;
    &amp;quot;r.profile&amp;quot;,&lt;br /&gt;
    input=&amp;quot;elevation&amp;quot;,&lt;br /&gt;
    coordinates=&amp;quot;641712,226095,641546,224138,641546,222048,641049,221186&amp;quot;,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
    flags=&amp;quot;gc&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Load the JSON data into a dataframe&lt;br /&gt;
df = pd.read_json(elevation)&lt;br /&gt;
print(df)&lt;br /&gt;
&lt;br /&gt;
# Create the scatter plot&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
plt.scatter(df[&amp;quot;distance&amp;quot;], df[&amp;quot;value&amp;quot;], c=df[&amp;quot;color&amp;quot;], marker=&amp;quot;o&amp;quot;)&lt;br /&gt;
plt.title(&amp;quot;Profile of Distance vs. Elevation with Color Coding&amp;quot;)&lt;br /&gt;
plt.xlabel(&amp;quot;Distance (meters)&amp;quot;)&lt;br /&gt;
plt.ylabel(&amp;quot;Elevation&amp;quot;)&lt;br /&gt;
plt.grid(True)&lt;br /&gt;
plt.show()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame Output (first 10 rows) ====  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
         easting       northing   distance      value    color&lt;br /&gt;
0  641712.000000  226095.000000   0.000000  84.661507  #71FF00&lt;br /&gt;
1  641711.154826  226085.036106   9.999675  84.511765  #6FFF00&lt;br /&gt;
2  641710.309651  226075.072213  19.999349  84.241806  #6BFF00&lt;br /&gt;
3  641709.464477  226065.108319  29.999024  84.304214  #6CFF00&lt;br /&gt;
4  641708.619302  226055.144426  39.998699  84.174400  #6AFF00&lt;br /&gt;
5  641707.774128  226045.180532  49.998374  84.112534  #6AFF00&lt;br /&gt;
6  641706.928954  226035.216639  59.998048  84.011208  #68FF00&lt;br /&gt;
7  641706.083779  226025.252745  69.997723  83.834084  #66FF00&lt;br /&gt;
8  641705.238605  226015.288851  79.997398  83.870193  #67FF00&lt;br /&gt;
9  641704.393430  226005.324958  89.997073  84.194908  #6BFF00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Visualization ====  &lt;br /&gt;
&lt;br /&gt;
Matplotlib scatter plot generated from the &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; JSON output: &lt;br /&gt;
&lt;br /&gt;
[[File:R profile plot.png]]&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt; can be directly loaded into a pandas DataFrame.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.class&amp;quot;,&lt;br /&gt;
    map=&amp;quot;bridges&amp;quot;,&lt;br /&gt;
    column=&amp;quot;YEAR_BUILT&amp;quot;,&lt;br /&gt;
    algorithm=&amp;quot;std&amp;quot;,&lt;br /&gt;
    nbclasses=5,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data[&amp;quot;intervals&amp;quot;])&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output (intervals) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
          from           to  frequency&lt;br /&gt;
0  1891.000000  1938.829689        750&lt;br /&gt;
1  1938.829689  1954.722836       1841&lt;br /&gt;
2  1954.722836  1970.615983       5556&lt;br /&gt;
3  1970.615983  1986.509130       1788&lt;br /&gt;
4  1986.509130  1997.000000       1003&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame to display categories and values.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.what.rast&amp;quot;, map=&amp;quot;bridges&amp;quot;, raster=&amp;quot;elevation&amp;quot;, flags=&amp;quot;p&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    category       value&lt;br /&gt;
0       4635   86.851212&lt;br /&gt;
1       4648   87.883255&lt;br /&gt;
2       4688  103.382004&lt;br /&gt;
3       4709   67.387856&lt;br /&gt;
4       4986   90.972832&lt;br /&gt;
5       4991   86.550629&lt;br /&gt;
6       5027   84.256355&lt;br /&gt;
7       5060   79.500443&lt;br /&gt;
8       5071   78.732864&lt;br /&gt;
9       5089   85.703636&lt;br /&gt;
10      5096  115.967323&lt;br /&gt;
11      5130   81.055870&lt;br /&gt;
12      5150   92.812927&lt;br /&gt;
13      5166   88.149483&lt;br /&gt;
14      5184   76.426331&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test Suite Update ====&lt;br /&gt;
Added 6 tests to the test suite, including both regression tests and future-proof tests to ensure functionality remains reliable in future updates.&lt;br /&gt;
&lt;br /&gt;
[[File:V what rast test file.png|700px]]&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame to locate closest points.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
&lt;br /&gt;
result = gs.parse_command(&lt;br /&gt;
    &amp;quot;r.distance&amp;quot;, map=[&amp;quot;zipcodes&amp;quot;, &amp;quot;lakes&amp;quot;], flags=&amp;quot;l&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
df = pd.json_normalize(result)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output (first 10 rows, truncated) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
       distance  from_cell.category  from_cell.easting  ...  to_cell.easting to_cell.northing  to_cell.label&lt;br /&gt;
0  11158.507466               27511      632604.951740  ...    640584.676990    215499.220687       Dam/Weir&lt;br /&gt;
1   1037.271198               27511      631734.981693  ...    632314.961724    221839.026534      Lake/Pond&lt;br /&gt;
2   2276.988836               27511      630015.040913  ...    630765.015090    219459.099418      Reservoir&lt;br /&gt;
3  14614.155031               27513      631055.005106  ...    640584.676990    215499.220687       Dam/Weir&lt;br /&gt;
4   3635.876453               27513      631674.983759  ...    635164.863600    227198.862392      Lake/Pond&lt;br /&gt;
5   6971.335517               27513      630005.041257  ...    630765.015090    219459.099418      Reservoir&lt;br /&gt;
6   8978.927486               27518      632134.967922  ...    640424.682499    215209.229568       Dam/Weir&lt;br /&gt;
7      0.000000               27518      630005.041257  ...    630005.041257    220199.076757      Lake/Pond&lt;br /&gt;
8    699.975899               27518      630005.041257  ...    630705.017156    219379.101868      Reservoir&lt;br /&gt;
9    509.197766               27529      641154.657366  ...    640674.673892    215249.228343       Dam/Weir&lt;br /&gt;
&lt;br /&gt;
[10 rows x 9 columns]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.distance&amp;quot;,&lt;br /&gt;
    flags=&amp;quot;p&amp;quot;,&lt;br /&gt;
    from_=&amp;quot;busroute_a&amp;quot;,&lt;br /&gt;
    to=&amp;quot;busstopsall&amp;quot;,&lt;br /&gt;
    upload=&amp;quot;dist,to_attr&amp;quot;,&lt;br /&gt;
    to_column=&amp;quot;routes&amp;quot;,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
   from_cat  to_cat      dist to_attr&lt;br /&gt;
0         1     112  0.142812     8,A&lt;br /&gt;
1         2      44  0.102327     9,A&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;r.volume&amp;quot;, input=&amp;quot;elevation&amp;quot;, clump=&amp;quot;geology_30m&amp;quot;, flags=&amp;quot;p&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    category  average         sum   cells        volume  easting  northing&lt;br /&gt;
0        217   118.93 86288827.99  725562 8628882798.63   635325    221535&lt;br /&gt;
1        262   108.97 21650560.37  198684 2165056037.02   638935    222495&lt;br /&gt;
2        270    92.23 63578874.44  689373 6357887443.53   642405    221485&lt;br /&gt;
3        405   132.96 33732662.09  253710 3373266208.59   631835    224095&lt;br /&gt;
4        583   139.35  3011288.22   21609  301128821.55   630205    224665&lt;br /&gt;
5        720   124.30   599618.16    4824   59961816.06   634075    227995&lt;br /&gt;
6        766   132.43   936791.20    7074   93679120.08   631425    227845&lt;br /&gt;
7        862   118.31  7302317.47   61722  730231746.74   630505    218885&lt;br /&gt;
8        910    94.20  4235816.13   44964  423581613.11   639215    216365&lt;br /&gt;
9        921   135.22  1693985.23   12528  169398523.05   630755    215445&lt;br /&gt;
10       945   127.24     1145.12       9     114512.03   630015    215015&lt;br /&gt;
11       946    89.91   365748.34    4068   36574833.85   639085    215255&lt;br /&gt;
12       948   129.02   112631.82     873   11263181.57   630185    215115&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test Suite Update ====&lt;br /&gt;
&lt;br /&gt;
Added 4 tests to the test suite, including both regression tests and future-proof tests to ensure functionality remains reliable in future updates.&lt;br /&gt;
&lt;br /&gt;
[[File:Test cmd 2.png|600px]]&lt;br /&gt;
[[File:Test cmd output.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{GSoC}}&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=File:Test_cmd_2.png&amp;diff=28683</id>
		<title>File:Test cmd 2.png</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=File:Test_cmd_2.png&amp;diff=28683"/>
		<updated>2025-08-24T07:59:35Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;test cmd 2&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=File:Test_cmd_output.png&amp;diff=28682</id>
		<title>File:Test cmd output.png</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=File:Test_cmd_output.png&amp;diff=28682"/>
		<updated>2025-08-24T07:58:42Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;test cmd output&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=File:Test_cmd.png&amp;diff=28681</id>
		<title>File:Test cmd.png</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=File:Test_cmd.png&amp;diff=28681"/>
		<updated>2025-08-24T07:57:50Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;test cmd&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28680</id>
		<title>GRASS GSoC 2025 Add JSON output to different tools in C</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28680"/>
		<updated>2025-08-24T07:51:32Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: /* Test Suite Update */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Nishant Bansal&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo - Open Source Geospatial Foundation]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/NishantBansal2003/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''GSoC proposal''' || [https://docs.google.com/document/d/1ZPQ9RXU7b_RUDmBmAMeK7ZjFAV1WC7Urd1Zlz678jyw/edit?tab=t.0#heading=h.z6ne0og04bp5 View Proposal]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Abstract =&lt;br /&gt;
Currently, most GRASS tools produce data in plain text by default. This means that users who want to process the output in Python need to create custom parsing code. To make this easier, several modules could be improved by oﬀering JSON as an alternative output format. Recently, the Parson library was added to the GRASS codebase to support JSON output in addition to plain text. Building on the advancements made during the last GSoC, my project aims to expand JSON output capabilities to more tools using the Parson library. I will also work on making the JSON structure introduced in the previous GSoC more useful and consistent. Additionally, I plan to add support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
&lt;br /&gt;
# Working with mentors to finalize the structure of the JSON output.&lt;br /&gt;
# Adding an option to choose the output format (plain text or JSON) for each updated tool.&lt;br /&gt;
# Make the JSON structure introduced during the last GSoC more useful and consistent across tools.&lt;br /&gt;
# Developing Python test cases to ensure that the JSON output works correctly and to avoid future issues.&lt;br /&gt;
# Providing basic documentation and example JSON outputs for each modified tool.&lt;br /&gt;
# Adding support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
# Develop simple examples demonstrating how to use JSON output in a data science workflow, such as reading JSON data into pandas or python.&lt;br /&gt;
&lt;br /&gt;
= Timeline =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Period !! Timeline  !! Tasks   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period &lt;br /&gt;
||&lt;br /&gt;
May 8 - June 1  &lt;br /&gt;
|| &lt;br /&gt;
# Reviewed the work done during the last GSoC to stabilize the JSON output.&lt;br /&gt;
# Discussed the priority tools for adding JSON support.&lt;br /&gt;
# Read GRASS documentation to add Python and JSON examples to the documentation.&lt;br /&gt;
|| &lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;13&amp;quot; | Official Coding Period &lt;br /&gt;
|-&lt;br /&gt;
| '''Week 1''' (June 2 - June 8) || &lt;br /&gt;
# Add JSON support for g.mapset [https://github.com/OSGeo/grass/pull/5810 #5810]&lt;br /&gt;
# Fix uninitialized zone_value in r.univar [https://github.com/OSGeo/grass/pull/5821 #5821]&lt;br /&gt;
# Add JSON support for r.what.color [https://github.com/OSGeo/grass/pull/5822 #5822]&lt;br /&gt;
# Update test file in r.info [https://github.com/OSGeo/grass/pull/5842 #5842]&lt;br /&gt;
# Improve interface for r.info [https://github.com/OSGeo/grass/pull/5859 #5859]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 2''' (June 9 - June 15) ||&lt;br /&gt;
# Add JSON support for g.version [https://github.com/OSGeo/grass/pull/5863 #5863]&lt;br /&gt;
# Add JSON support for i.group [https://github.com/OSGeo/grass/pull/5870 #5870]&lt;br /&gt;
# Add test file in r.stats [https://github.com/OSGeo/grass/pull/5879 #5879]&lt;br /&gt;
# Add tests for JSON output in r.stats [https://github.com/OSGeo/grass/pull/5892 #5892]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 3''' (June 16 - June 22) ||&lt;br /&gt;
# Update the JSON output schema of v.distance [https://github.com/OSGeo/grass/pull/5898 #5898]&lt;br /&gt;
# Fix uninitialized window variable in r.stats [https://github.com/OSGeo/grass/pull/5900 #5900]&lt;br /&gt;
# Add test file in g.list [https://github.com/OSGeo/grass/pull/5906 #5906]&lt;br /&gt;
# Add JSON support for g.list [https://github.com/OSGeo/grass/pull/5921 #5921]&lt;br /&gt;
# Update the JSON output schema of g.region [https://github.com/OSGeo/grass/pull/5929 #5929]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 4''' (June 23 - June 29) ||&lt;br /&gt;
# Update the JSON output schema of v.to.db [https://github.com/OSGeo/grass/pull/5946 #5946]&lt;br /&gt;
# Update the JSON output schema of r.profile [https://github.com/OSGeo/grass/pull/5962 #5962]&lt;br /&gt;
# Add SHELL and CSV output support for r.univar [https://github.com/OSGeo/grass/pull/5966 #5966]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 5''' (June 30 - July 6) ||&lt;br /&gt;
# Add test file in r.regression.line [https://github.com/OSGeo/grass/pull/5990 #5990]&lt;br /&gt;
# Add JSON support for r.regression.line [https://github.com/OSGeo/grass/pull/5993 #5993]&lt;br /&gt;
# Add test file in r.stats.quantile [https://github.com/OSGeo/grass/pull/6002 #6002]&lt;br /&gt;
# Add JSON support for r.stats.quantile [https://github.com/OSGeo/grass/pull/6007 #6007]&lt;br /&gt;
# Add test file in r.volume [https://github.com/OSGeo/grass/pull/6027 #6027]&lt;br /&gt;
# Add JSON support for r.volume [https://github.com/OSGeo/grass/pull/6036 #6036]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 6''' (July 7 - July 13) ||&lt;br /&gt;
# Add JSON support for db.columns [https://github.com/OSGeo/grass/pull/6042 #6042]&lt;br /&gt;
# Add test file in m.measure [https://github.com/OSGeo/grass/pull/6051 #6051]&lt;br /&gt;
# Add test file in db.connect [https://github.com/OSGeo/grass/pull/6052 #6052]&lt;br /&gt;
# Add JSON support for m.measure [https://github.com/OSGeo/grass/pull/6053 #6053]&lt;br /&gt;
# Add JSON support for db.connect [https://github.com/OSGeo/grass/pull/6059 #6059]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | '''Week 7''' (July 14 - July 20) ||&lt;br /&gt;
# Add test file in r.regression.multi [https://github.com/OSGeo/grass/pull/6066 #6066]&lt;br /&gt;
# Add test file in v.db.connect [https://github.com/OSGeo/grass/pull/6067 #6067]&lt;br /&gt;
# Add JSON support for r.regression.multi [https://github.com/OSGeo/grass/pull/6075 #6075]&lt;br /&gt;
# Add JSON support for v.db.connect [https://github.com/OSGeo/grass/pull/6077 #6077]&lt;br /&gt;
# Submit MidTerm evaluation.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 8''' (July 21 - July 27) ||&lt;br /&gt;
# Add JSON support for g.findfile [https://github.com/OSGeo/grass/pull/6091 #6091]&lt;br /&gt;
# Add test file in r3.info [https://github.com/OSGeo/grass/pull/6098 #6098]&lt;br /&gt;
# Add JSON support for r3.info [https://github.com/OSGeo/grass/pull/6103 #6103]&lt;br /&gt;
# Add test file in v.what.rast [https://github.com/OSGeo/grass/pull/6109 #6109]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 9''' (July 28 - August 3) ||&lt;br /&gt;
# Update format to CSV instead of shell in v.category [https://github.com/OSGeo/grass/pull/6132 #6132]&lt;br /&gt;
# Add CSV output support to r.stats [https://github.com/OSGeo/grass/pull/6133 #6133]&lt;br /&gt;
# Add CSV headers to r.volume [https://github.com/OSGeo/grass/pull/6134 #6134]&lt;br /&gt;
# Add JSON support for v.what.rast [https://github.com/OSGeo/grass/pull/6140 #6140]&lt;br /&gt;
# Add CSV output support to r.profile [https://github.com/OSGeo/grass/pull/6145 #6145]&lt;br /&gt;
# Update test cases in r.distance [https://github.com/OSGeo/grass/pull/6150 #6150]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 10''' (August 4 - August 10) ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 11''' (August 11 - August 17) ||&lt;br /&gt;
# Add JSON and CSV support for r.distance [https://github.com/OSGeo/grass/pull/6204 #6204]&lt;br /&gt;
# Add more test cases in v.class [https://github.com/OSGeo/grass/pull/6205 #6205]&lt;br /&gt;
# Add JSON and CSV support for v.class [https://github.com/OSGeo/grass/pull/6210 #6210]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 12''' (August 18 - August 24) ||&lt;br /&gt;
# Update JSON output format for v.what [https://github.com/OSGeo/grass/pull/6252 #6252]&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Evaluation Period &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | August 25 - September 1 ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
# Submit code, final evaluation and write the final GSoC report.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Reports =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* Introduced myself on the [https://discourse.osgeo.org/t/gsoc-2025-introduction-nishant-bansal/147005 OSGeo Discourse mailing list].&lt;br /&gt;
* Created both my [https://wiki.osgeo.org/wiki/User:Nishantbansal2003 personal Wiki page] and the [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C project Wiki page], adding all necessary project-related information.&lt;br /&gt;
* Read GRASS documentation to support the addition of Python and JSON examples.&lt;br /&gt;
* Worked on the following pull requests:&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5688 #5688]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5773 #5773]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5775 #5775]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5784 #5784]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5785 #5785]&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to the g.mapset and r.what.color modules.&lt;br /&gt;
* If time permits, I will begin improving the r.info interface: [https://github.com/OSGeo/grass/issues/5793 Issue #5793]&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
'''Project Discussions and Meetings'''&lt;br /&gt;
* '''14 May 2025''': Introductory meeting discussing JSON support and overall project milestones.&lt;br /&gt;
* '''21 May 2025''': Introduction with fellow developers. Discussed priority tools, adding Python/Pandas examples, and approaches for finalizing the JSON schema for each module.&lt;br /&gt;
&lt;br /&gt;
== Week-1 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.mapset''': Added JSON output support, now you can use -p and -l flags to get JSON-formatted results.&lt;br /&gt;
* '''r.univar''': Fixed a bug causing an uninitialized zone_value.&lt;br /&gt;
* '''r.what.color''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5822 #5822])&lt;br /&gt;
* '''r.info (regression tests)''': To maintain backward compatibility while updating its interface, I added strong regression tests.&lt;br /&gt;
* '''r.info (interface improvements)''': Began improving the module’s interface. (See PR [https://github.com/OSGeo/grass/pull/5859 #5859])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.version (see issue [https://github.com/OSGeo/grass/issues/5816 #5816]).&lt;br /&gt;
* Add JSON output support to i.group (see issue [https://github.com/OSGeo/grass/issues/5815 #5815]).&lt;br /&gt;
* If time permits, write tests for r.stats (see issue [https://github.com/OSGeo/grass/issues/5814 #5814]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-2 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.version''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5863 #5863])&lt;br /&gt;
* '''i.group''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5870 #5870])&lt;br /&gt;
* '''r.stats (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats''': Added tests for JSON output; this uncovered a bug, which was fixed alongside.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.distance (see issue [https://github.com/OSGeo/grass/issues/5846 #5846]).&lt;br /&gt;
* Add JSON output support to g.list (see issue [https://github.com/OSGeo/grass/issues/5848 #5848]).&lt;br /&gt;
* If time permits, fix the JSON output format of g.region (see issue [https://github.com/OSGeo/grass/issues/5828 #5828]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-3 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.distance''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5898 #5898])&lt;br /&gt;
* '''r.stats''': Fixed a bug causing an uninitialized &amp;lt;code&amp;gt;window&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
* '''g.list (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''g.list''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5921 #5921])&lt;br /&gt;
* '''g.region''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5929 #5929])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.to.db (see issue [https://github.com/OSGeo/grass/pull/5711 #5711]).&lt;br /&gt;
* Update JSON output format and documentation of r.profile (see issue [https://github.com/OSGeo/grass/pull/5834 #5834]).&lt;br /&gt;
* If time permits, add shell and csv output formats to r.univar (see issue [https://github.com/OSGeo/grass/pull/5824 #5824]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-4 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.to.db''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5946 #5946])&lt;br /&gt;
* '''r.profile''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5962 #5962])&lt;br /&gt;
* '''r.univar''': Implemented SHELL and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/5966 #5966])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.regression.line (see issue [https://github.com/OSGeo/grass/pull/5950 #5950]).&lt;br /&gt;
* Add JSON output support to r.stats.quantile (see issue [https://github.com/OSGeo/grass/pull/5951 #5951]).&lt;br /&gt;
* Add JSON output support to r.volume (see issue [https://github.com/OSGeo/grass/pull/5949 #5949]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-5 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.line (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.line''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5993 #5993])&lt;br /&gt;
* '''r.stats.quantile (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats.quantile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6007 #6007])&lt;br /&gt;
* '''r.volume (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.volume''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6036 #6036])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to m.measure (see issue [https://github.com/OSGeo/grass/pull/6006 #6006]).&lt;br /&gt;
* Add JSON output support to db.columns (see issue [https://github.com/OSGeo/grass/pull/6008 #6008]).&lt;br /&gt;
* Add JSON output support to db.connect (see issue [https://github.com/OSGeo/grass/pull/6009 #6009]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-6 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''db.columns''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6042 #6042])&lt;br /&gt;
* '''m.measure (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''m.measure''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6053 #6053])&lt;br /&gt;
* '''db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6059 #6059])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to v.db.connect (see issue [https://github.com/OSGeo/grass/pull/6014 #6014]).&lt;br /&gt;
* Add JSON output support to r.regression.multi (see issue [https://github.com/OSGeo/grass/pull/6010 #6010]).&lt;br /&gt;
* If time permits, add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* If time permits, add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-7 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.multi (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''v.db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.multi''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6075 #6075])&lt;br /&gt;
* '''v.db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6077 #6077])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* Add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
* If time permits, add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-8 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.findfile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6091 #6091])&lt;br /&gt;
* '''r3.info (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a flag-handling bug.&lt;br /&gt;
* '''r3.info''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6103 #6103])&lt;br /&gt;
* '''v.what.rast (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a sorting bug.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
* Update format to CSV instead of shell in v.category (see issue [https://github.com/OSGeo/grass/pull/6025 #6025]).&lt;br /&gt;
* Add CSV output support to r.stats (see issue [https://github.com/OSGeo/grass/issues/5835 #5835]).&lt;br /&gt;
* If time permits, add CSV output support to r.profile (see issue [https://github.com/OSGeo/grass/issues/5958 #5958]).&lt;br /&gt;
* If time permits, add CSV headers to r.volume (see issue [https://github.com/OSGeo/grass/issues/6049 #6049]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I don’t have any blockers this week. However, I’ll be a little busy with some personal work from August 3 to August 10, so I’ll try to complete next week’s tasks this week itself.&lt;br /&gt;
&lt;br /&gt;
== Week-9 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.category''': Updated format to CSV instead of shell. (See PR [https://github.com/OSGeo/grass/pull/6132 #6132])&lt;br /&gt;
* '''r.stats''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6133 #6133])&lt;br /&gt;
* '''r.volume''': Implemented CSV column headers support. (See PR [https://github.com/OSGeo/grass/pull/6134 #6134])&lt;br /&gt;
* '''v.what.rast''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6140 #6140])&lt;br /&gt;
* '''r.profile''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6145 #6145])&lt;br /&gt;
* '''r.distance (regression tests)''': Updated regression tests to ensure backward compatibility with new JSON support. (See PR [https://github.com/OSGeo/grass/pull/6150 #6150])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* I’ll be a bit busy with some personal work from August 3 to 10, so I completed next week’s tasks last week itself. I’ve already informed my mentors about my limited availability.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* Yes, I’ll be a bit busy with some personal work from August 3 to 10.&lt;br /&gt;
&lt;br /&gt;
== Week-10 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* This week I was busy with some personal work, so I did not complete any additional tasks. However, I had already finished this week’s tasks last week. This week, I mostly focused on handling reviews for those PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.distance (see issue [https://github.com/OSGeo/grass/issues/6135 #6135]).&lt;br /&gt;
* Add JSON output support to v.class (see issue [https://github.com/OSGeo/grass/issues/6136 #6136]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-11 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.distance''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6204 #6204])&lt;br /&gt;
* '''v.class''': Updated regression tests to ensure backward compatibility with new JSON support and fixed a out-of-bounds bug. (See PR [https://github.com/OSGeo/grass/pull/6205 #6205])&lt;br /&gt;
* '''v.class''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6210 #6210])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Discuss next week’s tasks with my mentors, if no issues are assigned, I’ll identify tools that currently lack JSON support and evaluate which ones are feasible to add it to.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-12 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.what''': Update JSON output format. (See PR [https://github.com/OSGeo/grass/pull/6252 #6252])&lt;br /&gt;
* Addressed review comments on my open PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
= Final Report =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Title''' || Add JSON output to different tools in C for GRASS&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo (Open Source Geospatial Foundation)]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''Program''' || Google Summer of Code 2025&lt;br /&gt;
|-&lt;br /&gt;
| '''Contributions''' || [https://github.com/OSGeo/grass/pulls?q=is%3Apr+author%3ANishantBansal2003+ Pull Requests]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
During my GSoC project, I addressed the challenge that most GRASS tools produced only plain text output, forcing users to write custom parsing code for Python-based workflows. The task was to make these tools more data-science friendly by adding structured output formats. To achieve this, I extended the use of the Parson library to implement consistent JSON output across multiple modules, refined the JSON structure introduced in the previous GSoC, and added optional support for SHELL and CSV outputs where appropriate. I developed comprehensive Python test cases, ensured backward compatibility, and provided documentation with practical examples such as loading JSON into pandas. As a result, GRASS users can now directly consume structured outputs in modern workflows, reducing parsing overhead, improving interoperability, and paving the way for broader adoption of GRASS in data science contexts.&lt;br /&gt;
&lt;br /&gt;
== The state of integration BEFORE the start of GSoC ==&lt;br /&gt;
Before the start of GSoC, the integration of GRASS with data science workflows was limited due to several challenges. The JSON outputs introduced in the previous GSoC contained deeply nested hierarchies, making them difficult to use directly with libraries such as '''pandas''' or in broader data science pipelines. While some tools already supported JSON (e.g., &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;), many important and highly demanded modules lacked JSON support, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt; and many more. This lack of consistency limited the seamless adoption of GRASS in analytics and machine learning contexts. Moreover, there was no clear '''documentation of the JSON schema''' or guidance on how to parse and utilize these outputs effectively in '''python or pandas''', which made it difficult for users to understand the use cases and integrate GRASS outputs into modern data science workflows.&lt;br /&gt;
&lt;br /&gt;
== The state of integration AFTER GSoC ==&lt;br /&gt;
&lt;br /&gt;
After GSoC, the integration state of JSON and alternative output formats in GRASS has significantly improved. I refactored the JSON structures for tools such as &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;, and others, removing unnecessary nesting introduced during the previous GSoC. This makes their outputs much easier to consume directly in &amp;lt;b&amp;gt;Python&amp;lt;/b&amp;gt; or with &amp;lt;b&amp;gt;pandas&amp;lt;/b&amp;gt;. In addition, JSON support has been extended to many essential and frequently used modules, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;, and many more. I also added detailed documentation of the JSON schema and provided examples showing how to parse and use these outputs effectively with Python and pandas. Together, these improvements make the adoption of GRASS in modern &amp;lt;b&amp;gt;data science workflows&amp;lt;/b&amp;gt; far more seamless and accessible.&lt;br /&gt;
&lt;br /&gt;
=== Enhancements made per tool ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;: Simplified JSON structure for univariate statistics, removed unnecessary hierarchy, and added new output format options (CSV, shell).&lt;br /&gt;
* &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;: Added JSON support for querying raster map colors, with a Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;: Added JSON support for reporting the current mapset, with a Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;: Updated JSON structure for raster map metadata, removing hierarchy for easier parsing. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;: Simplified JSON output for geographic region boundaries, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;: Added JSON support for GRASS version information, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;: Added JSON support for listing imagery groups, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;: Added JSON and CSV support for raster area statistics, with Python and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;: Refined JSON schema for nearest element queries, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;: Added JSON support for listing GRASS database files, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;: Updated JSON schema for printing vector attribute values, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;: Simplified JSON output, added CSV support, and included a matplotlib example for profile visualization.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;: Updated JSON schema for linear regression between rasters, with Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;: Updated JSON schema for category quantiles, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;: Added JSON support for raster volume calculations, fixed missing headers in CSV output, and provided pandas examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.columns&amp;lt;/code&amp;gt;: Added JSON output for listing database table columns, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;: Added JSON output for measuring lengths and areas, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.connect&amp;lt;/code&amp;gt;: Added JSON output for DB connection info, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.multi&amp;lt;/code&amp;gt;: Added JSON output for multiple regression between rasters, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.db.connect&amp;lt;/code&amp;gt;: Added JSON output for vector map attribute connections, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.findfile&amp;lt;/code&amp;gt;: Added JSON output for GRASS database file search, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;: Added JSON output for 3D raster map info, with Python example. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;: Added JSON output for extracting raster values at vector points, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt;: Added JSON and CSV support for locating closest points between raster objects, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;: Added JSON and CSV support for attribute data, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;: Migrated from manually written JSON to Parson-based JSON output, simplified schema, and provided Python parsing examples.&lt;br /&gt;
&lt;br /&gt;
All these changes were accompanied by regression tests to ensure that new JSON/CSV/SHELL/PLAIN output options do not break existing functionality. Additionally, I introduced comprehensive Python test cases for these outputs, making the enhancements reliable and future-proof. During this work, I also fixed several bugs in modules such as &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;, strengthening the stability of GRASS as a whole.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
To sum up, I’m glad to have met the three core objectives of my project with the constant support of my mentors:&lt;br /&gt;
&lt;br /&gt;
* Brought JSON output to several important and long-requested modules, added regression tests, and ensured reliable future test coverage.&lt;br /&gt;
* Enhanced the JSON schema introduced in last year’s GSoC by reducing unnecessary hierarchy, making it more consistent across tools, and providing Python/Pandas examples for practical use.&lt;br /&gt;
* Expanded &amp;lt;b&amp;gt;CSV&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;SHELL&amp;lt;/b&amp;gt; output formats to additional tools where they could bring value.&lt;br /&gt;
&lt;br /&gt;
This journey has been both rewarding and educational, and I’m grateful for the opportunity to contribute to GRASS through GSoC 2025. I especially want to thank &amp;lt;b&amp;gt;Anna Petrasova&amp;lt;/b&amp;gt; and the GRASS Development Team for their guidance and support. I’m excited to keep building on this work and further extend JSON and other features in the future.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
There is significant scope to extend structured output support across GRASS tools. In particular, future efforts should focus on:&lt;br /&gt;
* Expanding JSON output to additional modules, with details tracked here: [https://github.com/orgs/OSGeo/projects/10 GRASS JSON Outputs Project].&lt;br /&gt;
* Refining and standardizing the JSON schema to better support complex workflows and integrations.&lt;br /&gt;
* Exploring and implementing other output formats (e.g., SHELL, CSV, PLAIN) where they can improve usability and automation.&lt;br /&gt;
I also plan to continue contributing to GRASS by extending JSON support to more modules and engaging in community discussions around schema design and format integration.&lt;br /&gt;
&lt;br /&gt;
== Log of Pull Requests ==&lt;br /&gt;
Below is a list of pull requests submitted to the GRASS repository during GSoC 2025:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pull Request !! Description  !! Date   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5688 #5688] || r.univar: Fix JSON structure || May 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5773 #5773] || r.what.color: Add test file || May 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5775 #5775] || g.mapset: Add test file || May 26, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5784 #5784] || r.info: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;Closed&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5785 #5785] || g.region: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5810 #5810] || g.mapset: Add JSON support || June 2, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5821 #5821] || r.univar: Fix uninitialized zone_value || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5822 #5822] || r.what.color: Add JSON support || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5842 #5842] || r.info: Update test file || June 5, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5859 #5859] || r.info: Improve interface || June 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5863 #5863] || g.version: Add JSON support || June 9, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5870 #5870] || i.group: Add JSON support || June 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5879 #5879] || r.stats: Add test file || June 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5892 #5892] || r.stats: Add tests for JSON output || June 14, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5898 #5898] || v.distance: Update JSON format || June 16, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5900 #5900] || r.stats: fix uninitialised window value || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5906 #5906] || g.list: Add test file || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5921 #5921] || g.list: Add JSON support || June 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5929 #5929] || g.region: Update JSON format || June 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5946 #5946] || v.to.db: Update JSON format || June 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5962 #5962] || r.profile: Update JSON format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5966 #5966] || r.univar: Add shell and CSV format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5990 #5990] || r.regression.line: Add test file || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5993 #5993] || r.regression.line: Add JSON support || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6002 #6002] || r.stats.quantile: Add test file || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6007 #6007] || r.stats.quantile: Add JSON support || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6027 #6027] || r.volume: Add test file || July 4, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6036 #6036] || r.volume: Add JSON support || July 6, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6042 #6042] || db.columns: Add JSON support || July 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6051 #6051] || m.measure: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6052 #6052] || db.connect: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6053 #6053] || m.measure: Add JSON support || July 11, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6059 #6059] || db.connect: Add JSON support || July 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6066 #6066] || r.regression.multi: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6067 #6067] || v.db.connect: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6075 #6075] || r.regression.multi: Add JSON support || July 18, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6077 #6077] || v.db.connect: Add JSON support || July 19, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6091 #6091] || g.findfile: Add JSON support || July 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6098 #6098] || r3.info: Add test file || July 22, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6103 #6103] || r3.info: Add JSON support || July 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6109 #6109] || v.what.rast: Add test file || July 24, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6132 #6132] || v.category: Use CSV format instead of shell format || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6133 #6133] || r.stats: add CSV support || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6134 #6134] || r.volume: add csv column headers || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6140 #6140] || v.what.rast: Add JSON support || July 29, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6145 #6145] || r.profile: Add CSV support || July 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6150 #6150] || r.distance: Update existing test cases || August 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6204 #6204] || r.distance: Add JSON and CSV support || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6205 #6205] || v.class: Add more test cases and fix out-of-bounds bug || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6210 #6210] || v.class: Add JSON and CSV support || August 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6252 #6252] || v.what: Update JSON output format || August 23, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Additional Links ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Ttile&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| OSGeo Wiki Page&lt;br /&gt;
| [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C Add JSON output to different tools in C for GRASS]&lt;br /&gt;
|-&lt;br /&gt;
| Github Fork&lt;br /&gt;
| [https://github.com/NishantBansal2003/grass GitHub Fork]&lt;br /&gt;
|-&lt;br /&gt;
| GSoC Page&lt;br /&gt;
| [https://summerofcode.withgoogle.com/programs/2025/projects/GPVGd3DH Link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples &amp;amp; Images ==&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; JSON output in Python ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; can be directly loaded into a pandas DataFrame and used for plotting with matplotlib.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
# Run r.profile command&lt;br /&gt;
elevation = gs.read_command(&lt;br /&gt;
    &amp;quot;r.profile&amp;quot;,&lt;br /&gt;
    input=&amp;quot;elevation&amp;quot;,&lt;br /&gt;
    coordinates=&amp;quot;641712,226095,641546,224138,641546,222048,641049,221186&amp;quot;,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
    flags=&amp;quot;gc&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Load the JSON data into a dataframe&lt;br /&gt;
df = pd.read_json(elevation)&lt;br /&gt;
print(df)&lt;br /&gt;
&lt;br /&gt;
# Create the scatter plot&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
plt.scatter(df[&amp;quot;distance&amp;quot;], df[&amp;quot;value&amp;quot;], c=df[&amp;quot;color&amp;quot;], marker=&amp;quot;o&amp;quot;)&lt;br /&gt;
plt.title(&amp;quot;Profile of Distance vs. Elevation with Color Coding&amp;quot;)&lt;br /&gt;
plt.xlabel(&amp;quot;Distance (meters)&amp;quot;)&lt;br /&gt;
plt.ylabel(&amp;quot;Elevation&amp;quot;)&lt;br /&gt;
plt.grid(True)&lt;br /&gt;
plt.show()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame Output (first 10 rows) ====  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
         easting       northing   distance      value    color&lt;br /&gt;
0  641712.000000  226095.000000   0.000000  84.661507  #71FF00&lt;br /&gt;
1  641711.154826  226085.036106   9.999675  84.511765  #6FFF00&lt;br /&gt;
2  641710.309651  226075.072213  19.999349  84.241806  #6BFF00&lt;br /&gt;
3  641709.464477  226065.108319  29.999024  84.304214  #6CFF00&lt;br /&gt;
4  641708.619302  226055.144426  39.998699  84.174400  #6AFF00&lt;br /&gt;
5  641707.774128  226045.180532  49.998374  84.112534  #6AFF00&lt;br /&gt;
6  641706.928954  226035.216639  59.998048  84.011208  #68FF00&lt;br /&gt;
7  641706.083779  226025.252745  69.997723  83.834084  #66FF00&lt;br /&gt;
8  641705.238605  226015.288851  79.997398  83.870193  #67FF00&lt;br /&gt;
9  641704.393430  226005.324958  89.997073  84.194908  #6BFF00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Visualization ====  &lt;br /&gt;
&lt;br /&gt;
Matplotlib scatter plot generated from the &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; JSON output: &lt;br /&gt;
&lt;br /&gt;
[[File:R profile plot.png]]&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt; can be directly loaded into a pandas DataFrame.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.class&amp;quot;,&lt;br /&gt;
    map=&amp;quot;bridges&amp;quot;,&lt;br /&gt;
    column=&amp;quot;YEAR_BUILT&amp;quot;,&lt;br /&gt;
    algorithm=&amp;quot;std&amp;quot;,&lt;br /&gt;
    nbclasses=5,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data[&amp;quot;intervals&amp;quot;])&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output (intervals) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
          from           to  frequency&lt;br /&gt;
0  1891.000000  1938.829689        750&lt;br /&gt;
1  1938.829689  1954.722836       1841&lt;br /&gt;
2  1954.722836  1970.615983       5556&lt;br /&gt;
3  1970.615983  1986.509130       1788&lt;br /&gt;
4  1986.509130  1997.000000       1003&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame to display categories and values.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.what.rast&amp;quot;, map=&amp;quot;bridges&amp;quot;, raster=&amp;quot;elevation&amp;quot;, flags=&amp;quot;p&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    category       value&lt;br /&gt;
0       4635   86.851212&lt;br /&gt;
1       4648   87.883255&lt;br /&gt;
2       4688  103.382004&lt;br /&gt;
3       4709   67.387856&lt;br /&gt;
4       4986   90.972832&lt;br /&gt;
5       4991   86.550629&lt;br /&gt;
6       5027   84.256355&lt;br /&gt;
7       5060   79.500443&lt;br /&gt;
8       5071   78.732864&lt;br /&gt;
9       5089   85.703636&lt;br /&gt;
10      5096  115.967323&lt;br /&gt;
11      5130   81.055870&lt;br /&gt;
12      5150   92.812927&lt;br /&gt;
13      5166   88.149483&lt;br /&gt;
14      5184   76.426331&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test Suite Update ====&lt;br /&gt;
Added 6 tests to the test suite, including both regression tests and future-proof tests to ensure functionality remains reliable in future updates.&lt;br /&gt;
&lt;br /&gt;
[[File:V what rast test file.png|700px]]&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame to locate closest points.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
&lt;br /&gt;
result = gs.parse_command(&lt;br /&gt;
    &amp;quot;r.distance&amp;quot;, map=[&amp;quot;zipcodes&amp;quot;, &amp;quot;lakes&amp;quot;], flags=&amp;quot;l&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
df = pd.json_normalize(result)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output (first 10 rows, truncated) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
       distance  from_cell.category  from_cell.easting  ...  to_cell.easting to_cell.northing  to_cell.label&lt;br /&gt;
0  11158.507466               27511      632604.951740  ...    640584.676990    215499.220687       Dam/Weir&lt;br /&gt;
1   1037.271198               27511      631734.981693  ...    632314.961724    221839.026534      Lake/Pond&lt;br /&gt;
2   2276.988836               27511      630015.040913  ...    630765.015090    219459.099418      Reservoir&lt;br /&gt;
3  14614.155031               27513      631055.005106  ...    640584.676990    215499.220687       Dam/Weir&lt;br /&gt;
4   3635.876453               27513      631674.983759  ...    635164.863600    227198.862392      Lake/Pond&lt;br /&gt;
5   6971.335517               27513      630005.041257  ...    630765.015090    219459.099418      Reservoir&lt;br /&gt;
6   8978.927486               27518      632134.967922  ...    640424.682499    215209.229568       Dam/Weir&lt;br /&gt;
7      0.000000               27518      630005.041257  ...    630005.041257    220199.076757      Lake/Pond&lt;br /&gt;
8    699.975899               27518      630005.041257  ...    630705.017156    219379.101868      Reservoir&lt;br /&gt;
9    509.197766               27529      641154.657366  ...    640674.673892    215249.228343       Dam/Weir&lt;br /&gt;
&lt;br /&gt;
[10 rows x 9 columns]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.distance&amp;quot;,&lt;br /&gt;
    flags=&amp;quot;p&amp;quot;,&lt;br /&gt;
    from_=&amp;quot;busroute_a&amp;quot;,&lt;br /&gt;
    to=&amp;quot;busstopsall&amp;quot;,&lt;br /&gt;
    upload=&amp;quot;dist,to_attr&amp;quot;,&lt;br /&gt;
    to_column=&amp;quot;routes&amp;quot;,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
   from_cat  to_cat      dist to_attr&lt;br /&gt;
0         1     112  0.142812     8,A&lt;br /&gt;
1         2      44  0.102327     9,A&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;r.volume&amp;quot;, input=&amp;quot;elevation&amp;quot;, clump=&amp;quot;geology_30m&amp;quot;, flags=&amp;quot;p&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    category  average         sum   cells        volume  easting  northing&lt;br /&gt;
0        217   118.93 86288827.99  725562 8628882798.63   635325    221535&lt;br /&gt;
1        262   108.97 21650560.37  198684 2165056037.02   638935    222495&lt;br /&gt;
2        270    92.23 63578874.44  689373 6357887443.53   642405    221485&lt;br /&gt;
3        405   132.96 33732662.09  253710 3373266208.59   631835    224095&lt;br /&gt;
4        583   139.35  3011288.22   21609  301128821.55   630205    224665&lt;br /&gt;
5        720   124.30   599618.16    4824   59961816.06   634075    227995&lt;br /&gt;
6        766   132.43   936791.20    7074   93679120.08   631425    227845&lt;br /&gt;
7        862   118.31  7302317.47   61722  730231746.74   630505    218885&lt;br /&gt;
8        910    94.20  4235816.13   44964  423581613.11   639215    216365&lt;br /&gt;
9        921   135.22  1693985.23   12528  169398523.05   630755    215445&lt;br /&gt;
10       945   127.24     1145.12       9     114512.03   630015    215015&lt;br /&gt;
11       946    89.91   365748.34    4068   36574833.85   639085    215255&lt;br /&gt;
12       948   129.02   112631.82     873   11263181.57   630185    215115&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{GSoC}}&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28679</id>
		<title>GRASS GSoC 2025 Add JSON output to different tools in C</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28679"/>
		<updated>2025-08-24T07:51:13Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: /* Test Suite Update */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Nishant Bansal&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo - Open Source Geospatial Foundation]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/NishantBansal2003/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''GSoC proposal''' || [https://docs.google.com/document/d/1ZPQ9RXU7b_RUDmBmAMeK7ZjFAV1WC7Urd1Zlz678jyw/edit?tab=t.0#heading=h.z6ne0og04bp5 View Proposal]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Abstract =&lt;br /&gt;
Currently, most GRASS tools produce data in plain text by default. This means that users who want to process the output in Python need to create custom parsing code. To make this easier, several modules could be improved by oﬀering JSON as an alternative output format. Recently, the Parson library was added to the GRASS codebase to support JSON output in addition to plain text. Building on the advancements made during the last GSoC, my project aims to expand JSON output capabilities to more tools using the Parson library. I will also work on making the JSON structure introduced in the previous GSoC more useful and consistent. Additionally, I plan to add support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
&lt;br /&gt;
# Working with mentors to finalize the structure of the JSON output.&lt;br /&gt;
# Adding an option to choose the output format (plain text or JSON) for each updated tool.&lt;br /&gt;
# Make the JSON structure introduced during the last GSoC more useful and consistent across tools.&lt;br /&gt;
# Developing Python test cases to ensure that the JSON output works correctly and to avoid future issues.&lt;br /&gt;
# Providing basic documentation and example JSON outputs for each modified tool.&lt;br /&gt;
# Adding support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
# Develop simple examples demonstrating how to use JSON output in a data science workflow, such as reading JSON data into pandas or python.&lt;br /&gt;
&lt;br /&gt;
= Timeline =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Period !! Timeline  !! Tasks   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period &lt;br /&gt;
||&lt;br /&gt;
May 8 - June 1  &lt;br /&gt;
|| &lt;br /&gt;
# Reviewed the work done during the last GSoC to stabilize the JSON output.&lt;br /&gt;
# Discussed the priority tools for adding JSON support.&lt;br /&gt;
# Read GRASS documentation to add Python and JSON examples to the documentation.&lt;br /&gt;
|| &lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;13&amp;quot; | Official Coding Period &lt;br /&gt;
|-&lt;br /&gt;
| '''Week 1''' (June 2 - June 8) || &lt;br /&gt;
# Add JSON support for g.mapset [https://github.com/OSGeo/grass/pull/5810 #5810]&lt;br /&gt;
# Fix uninitialized zone_value in r.univar [https://github.com/OSGeo/grass/pull/5821 #5821]&lt;br /&gt;
# Add JSON support for r.what.color [https://github.com/OSGeo/grass/pull/5822 #5822]&lt;br /&gt;
# Update test file in r.info [https://github.com/OSGeo/grass/pull/5842 #5842]&lt;br /&gt;
# Improve interface for r.info [https://github.com/OSGeo/grass/pull/5859 #5859]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 2''' (June 9 - June 15) ||&lt;br /&gt;
# Add JSON support for g.version [https://github.com/OSGeo/grass/pull/5863 #5863]&lt;br /&gt;
# Add JSON support for i.group [https://github.com/OSGeo/grass/pull/5870 #5870]&lt;br /&gt;
# Add test file in r.stats [https://github.com/OSGeo/grass/pull/5879 #5879]&lt;br /&gt;
# Add tests for JSON output in r.stats [https://github.com/OSGeo/grass/pull/5892 #5892]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 3''' (June 16 - June 22) ||&lt;br /&gt;
# Update the JSON output schema of v.distance [https://github.com/OSGeo/grass/pull/5898 #5898]&lt;br /&gt;
# Fix uninitialized window variable in r.stats [https://github.com/OSGeo/grass/pull/5900 #5900]&lt;br /&gt;
# Add test file in g.list [https://github.com/OSGeo/grass/pull/5906 #5906]&lt;br /&gt;
# Add JSON support for g.list [https://github.com/OSGeo/grass/pull/5921 #5921]&lt;br /&gt;
# Update the JSON output schema of g.region [https://github.com/OSGeo/grass/pull/5929 #5929]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 4''' (June 23 - June 29) ||&lt;br /&gt;
# Update the JSON output schema of v.to.db [https://github.com/OSGeo/grass/pull/5946 #5946]&lt;br /&gt;
# Update the JSON output schema of r.profile [https://github.com/OSGeo/grass/pull/5962 #5962]&lt;br /&gt;
# Add SHELL and CSV output support for r.univar [https://github.com/OSGeo/grass/pull/5966 #5966]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 5''' (June 30 - July 6) ||&lt;br /&gt;
# Add test file in r.regression.line [https://github.com/OSGeo/grass/pull/5990 #5990]&lt;br /&gt;
# Add JSON support for r.regression.line [https://github.com/OSGeo/grass/pull/5993 #5993]&lt;br /&gt;
# Add test file in r.stats.quantile [https://github.com/OSGeo/grass/pull/6002 #6002]&lt;br /&gt;
# Add JSON support for r.stats.quantile [https://github.com/OSGeo/grass/pull/6007 #6007]&lt;br /&gt;
# Add test file in r.volume [https://github.com/OSGeo/grass/pull/6027 #6027]&lt;br /&gt;
# Add JSON support for r.volume [https://github.com/OSGeo/grass/pull/6036 #6036]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 6''' (July 7 - July 13) ||&lt;br /&gt;
# Add JSON support for db.columns [https://github.com/OSGeo/grass/pull/6042 #6042]&lt;br /&gt;
# Add test file in m.measure [https://github.com/OSGeo/grass/pull/6051 #6051]&lt;br /&gt;
# Add test file in db.connect [https://github.com/OSGeo/grass/pull/6052 #6052]&lt;br /&gt;
# Add JSON support for m.measure [https://github.com/OSGeo/grass/pull/6053 #6053]&lt;br /&gt;
# Add JSON support for db.connect [https://github.com/OSGeo/grass/pull/6059 #6059]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | '''Week 7''' (July 14 - July 20) ||&lt;br /&gt;
# Add test file in r.regression.multi [https://github.com/OSGeo/grass/pull/6066 #6066]&lt;br /&gt;
# Add test file in v.db.connect [https://github.com/OSGeo/grass/pull/6067 #6067]&lt;br /&gt;
# Add JSON support for r.regression.multi [https://github.com/OSGeo/grass/pull/6075 #6075]&lt;br /&gt;
# Add JSON support for v.db.connect [https://github.com/OSGeo/grass/pull/6077 #6077]&lt;br /&gt;
# Submit MidTerm evaluation.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 8''' (July 21 - July 27) ||&lt;br /&gt;
# Add JSON support for g.findfile [https://github.com/OSGeo/grass/pull/6091 #6091]&lt;br /&gt;
# Add test file in r3.info [https://github.com/OSGeo/grass/pull/6098 #6098]&lt;br /&gt;
# Add JSON support for r3.info [https://github.com/OSGeo/grass/pull/6103 #6103]&lt;br /&gt;
# Add test file in v.what.rast [https://github.com/OSGeo/grass/pull/6109 #6109]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 9''' (July 28 - August 3) ||&lt;br /&gt;
# Update format to CSV instead of shell in v.category [https://github.com/OSGeo/grass/pull/6132 #6132]&lt;br /&gt;
# Add CSV output support to r.stats [https://github.com/OSGeo/grass/pull/6133 #6133]&lt;br /&gt;
# Add CSV headers to r.volume [https://github.com/OSGeo/grass/pull/6134 #6134]&lt;br /&gt;
# Add JSON support for v.what.rast [https://github.com/OSGeo/grass/pull/6140 #6140]&lt;br /&gt;
# Add CSV output support to r.profile [https://github.com/OSGeo/grass/pull/6145 #6145]&lt;br /&gt;
# Update test cases in r.distance [https://github.com/OSGeo/grass/pull/6150 #6150]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 10''' (August 4 - August 10) ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 11''' (August 11 - August 17) ||&lt;br /&gt;
# Add JSON and CSV support for r.distance [https://github.com/OSGeo/grass/pull/6204 #6204]&lt;br /&gt;
# Add more test cases in v.class [https://github.com/OSGeo/grass/pull/6205 #6205]&lt;br /&gt;
# Add JSON and CSV support for v.class [https://github.com/OSGeo/grass/pull/6210 #6210]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 12''' (August 18 - August 24) ||&lt;br /&gt;
# Update JSON output format for v.what [https://github.com/OSGeo/grass/pull/6252 #6252]&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Evaluation Period &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | August 25 - September 1 ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
# Submit code, final evaluation and write the final GSoC report.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Reports =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* Introduced myself on the [https://discourse.osgeo.org/t/gsoc-2025-introduction-nishant-bansal/147005 OSGeo Discourse mailing list].&lt;br /&gt;
* Created both my [https://wiki.osgeo.org/wiki/User:Nishantbansal2003 personal Wiki page] and the [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C project Wiki page], adding all necessary project-related information.&lt;br /&gt;
* Read GRASS documentation to support the addition of Python and JSON examples.&lt;br /&gt;
* Worked on the following pull requests:&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5688 #5688]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5773 #5773]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5775 #5775]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5784 #5784]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5785 #5785]&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to the g.mapset and r.what.color modules.&lt;br /&gt;
* If time permits, I will begin improving the r.info interface: [https://github.com/OSGeo/grass/issues/5793 Issue #5793]&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
'''Project Discussions and Meetings'''&lt;br /&gt;
* '''14 May 2025''': Introductory meeting discussing JSON support and overall project milestones.&lt;br /&gt;
* '''21 May 2025''': Introduction with fellow developers. Discussed priority tools, adding Python/Pandas examples, and approaches for finalizing the JSON schema for each module.&lt;br /&gt;
&lt;br /&gt;
== Week-1 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.mapset''': Added JSON output support, now you can use -p and -l flags to get JSON-formatted results.&lt;br /&gt;
* '''r.univar''': Fixed a bug causing an uninitialized zone_value.&lt;br /&gt;
* '''r.what.color''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5822 #5822])&lt;br /&gt;
* '''r.info (regression tests)''': To maintain backward compatibility while updating its interface, I added strong regression tests.&lt;br /&gt;
* '''r.info (interface improvements)''': Began improving the module’s interface. (See PR [https://github.com/OSGeo/grass/pull/5859 #5859])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.version (see issue [https://github.com/OSGeo/grass/issues/5816 #5816]).&lt;br /&gt;
* Add JSON output support to i.group (see issue [https://github.com/OSGeo/grass/issues/5815 #5815]).&lt;br /&gt;
* If time permits, write tests for r.stats (see issue [https://github.com/OSGeo/grass/issues/5814 #5814]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-2 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.version''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5863 #5863])&lt;br /&gt;
* '''i.group''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5870 #5870])&lt;br /&gt;
* '''r.stats (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats''': Added tests for JSON output; this uncovered a bug, which was fixed alongside.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.distance (see issue [https://github.com/OSGeo/grass/issues/5846 #5846]).&lt;br /&gt;
* Add JSON output support to g.list (see issue [https://github.com/OSGeo/grass/issues/5848 #5848]).&lt;br /&gt;
* If time permits, fix the JSON output format of g.region (see issue [https://github.com/OSGeo/grass/issues/5828 #5828]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-3 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.distance''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5898 #5898])&lt;br /&gt;
* '''r.stats''': Fixed a bug causing an uninitialized &amp;lt;code&amp;gt;window&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
* '''g.list (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''g.list''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5921 #5921])&lt;br /&gt;
* '''g.region''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5929 #5929])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.to.db (see issue [https://github.com/OSGeo/grass/pull/5711 #5711]).&lt;br /&gt;
* Update JSON output format and documentation of r.profile (see issue [https://github.com/OSGeo/grass/pull/5834 #5834]).&lt;br /&gt;
* If time permits, add shell and csv output formats to r.univar (see issue [https://github.com/OSGeo/grass/pull/5824 #5824]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-4 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.to.db''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5946 #5946])&lt;br /&gt;
* '''r.profile''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5962 #5962])&lt;br /&gt;
* '''r.univar''': Implemented SHELL and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/5966 #5966])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.regression.line (see issue [https://github.com/OSGeo/grass/pull/5950 #5950]).&lt;br /&gt;
* Add JSON output support to r.stats.quantile (see issue [https://github.com/OSGeo/grass/pull/5951 #5951]).&lt;br /&gt;
* Add JSON output support to r.volume (see issue [https://github.com/OSGeo/grass/pull/5949 #5949]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-5 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.line (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.line''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5993 #5993])&lt;br /&gt;
* '''r.stats.quantile (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats.quantile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6007 #6007])&lt;br /&gt;
* '''r.volume (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.volume''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6036 #6036])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to m.measure (see issue [https://github.com/OSGeo/grass/pull/6006 #6006]).&lt;br /&gt;
* Add JSON output support to db.columns (see issue [https://github.com/OSGeo/grass/pull/6008 #6008]).&lt;br /&gt;
* Add JSON output support to db.connect (see issue [https://github.com/OSGeo/grass/pull/6009 #6009]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-6 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''db.columns''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6042 #6042])&lt;br /&gt;
* '''m.measure (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''m.measure''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6053 #6053])&lt;br /&gt;
* '''db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6059 #6059])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to v.db.connect (see issue [https://github.com/OSGeo/grass/pull/6014 #6014]).&lt;br /&gt;
* Add JSON output support to r.regression.multi (see issue [https://github.com/OSGeo/grass/pull/6010 #6010]).&lt;br /&gt;
* If time permits, add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* If time permits, add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-7 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.multi (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''v.db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.multi''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6075 #6075])&lt;br /&gt;
* '''v.db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6077 #6077])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* Add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
* If time permits, add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-8 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.findfile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6091 #6091])&lt;br /&gt;
* '''r3.info (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a flag-handling bug.&lt;br /&gt;
* '''r3.info''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6103 #6103])&lt;br /&gt;
* '''v.what.rast (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a sorting bug.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
* Update format to CSV instead of shell in v.category (see issue [https://github.com/OSGeo/grass/pull/6025 #6025]).&lt;br /&gt;
* Add CSV output support to r.stats (see issue [https://github.com/OSGeo/grass/issues/5835 #5835]).&lt;br /&gt;
* If time permits, add CSV output support to r.profile (see issue [https://github.com/OSGeo/grass/issues/5958 #5958]).&lt;br /&gt;
* If time permits, add CSV headers to r.volume (see issue [https://github.com/OSGeo/grass/issues/6049 #6049]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I don’t have any blockers this week. However, I’ll be a little busy with some personal work from August 3 to August 10, so I’ll try to complete next week’s tasks this week itself.&lt;br /&gt;
&lt;br /&gt;
== Week-9 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.category''': Updated format to CSV instead of shell. (See PR [https://github.com/OSGeo/grass/pull/6132 #6132])&lt;br /&gt;
* '''r.stats''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6133 #6133])&lt;br /&gt;
* '''r.volume''': Implemented CSV column headers support. (See PR [https://github.com/OSGeo/grass/pull/6134 #6134])&lt;br /&gt;
* '''v.what.rast''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6140 #6140])&lt;br /&gt;
* '''r.profile''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6145 #6145])&lt;br /&gt;
* '''r.distance (regression tests)''': Updated regression tests to ensure backward compatibility with new JSON support. (See PR [https://github.com/OSGeo/grass/pull/6150 #6150])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* I’ll be a bit busy with some personal work from August 3 to 10, so I completed next week’s tasks last week itself. I’ve already informed my mentors about my limited availability.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* Yes, I’ll be a bit busy with some personal work from August 3 to 10.&lt;br /&gt;
&lt;br /&gt;
== Week-10 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* This week I was busy with some personal work, so I did not complete any additional tasks. However, I had already finished this week’s tasks last week. This week, I mostly focused on handling reviews for those PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.distance (see issue [https://github.com/OSGeo/grass/issues/6135 #6135]).&lt;br /&gt;
* Add JSON output support to v.class (see issue [https://github.com/OSGeo/grass/issues/6136 #6136]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-11 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.distance''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6204 #6204])&lt;br /&gt;
* '''v.class''': Updated regression tests to ensure backward compatibility with new JSON support and fixed a out-of-bounds bug. (See PR [https://github.com/OSGeo/grass/pull/6205 #6205])&lt;br /&gt;
* '''v.class''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6210 #6210])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Discuss next week’s tasks with my mentors, if no issues are assigned, I’ll identify tools that currently lack JSON support and evaluate which ones are feasible to add it to.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-12 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.what''': Update JSON output format. (See PR [https://github.com/OSGeo/grass/pull/6252 #6252])&lt;br /&gt;
* Addressed review comments on my open PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
= Final Report =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Title''' || Add JSON output to different tools in C for GRASS&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo (Open Source Geospatial Foundation)]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''Program''' || Google Summer of Code 2025&lt;br /&gt;
|-&lt;br /&gt;
| '''Contributions''' || [https://github.com/OSGeo/grass/pulls?q=is%3Apr+author%3ANishantBansal2003+ Pull Requests]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
During my GSoC project, I addressed the challenge that most GRASS tools produced only plain text output, forcing users to write custom parsing code for Python-based workflows. The task was to make these tools more data-science friendly by adding structured output formats. To achieve this, I extended the use of the Parson library to implement consistent JSON output across multiple modules, refined the JSON structure introduced in the previous GSoC, and added optional support for SHELL and CSV outputs where appropriate. I developed comprehensive Python test cases, ensured backward compatibility, and provided documentation with practical examples such as loading JSON into pandas. As a result, GRASS users can now directly consume structured outputs in modern workflows, reducing parsing overhead, improving interoperability, and paving the way for broader adoption of GRASS in data science contexts.&lt;br /&gt;
&lt;br /&gt;
== The state of integration BEFORE the start of GSoC ==&lt;br /&gt;
Before the start of GSoC, the integration of GRASS with data science workflows was limited due to several challenges. The JSON outputs introduced in the previous GSoC contained deeply nested hierarchies, making them difficult to use directly with libraries such as '''pandas''' or in broader data science pipelines. While some tools already supported JSON (e.g., &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;), many important and highly demanded modules lacked JSON support, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt; and many more. This lack of consistency limited the seamless adoption of GRASS in analytics and machine learning contexts. Moreover, there was no clear '''documentation of the JSON schema''' or guidance on how to parse and utilize these outputs effectively in '''python or pandas''', which made it difficult for users to understand the use cases and integrate GRASS outputs into modern data science workflows.&lt;br /&gt;
&lt;br /&gt;
== The state of integration AFTER GSoC ==&lt;br /&gt;
&lt;br /&gt;
After GSoC, the integration state of JSON and alternative output formats in GRASS has significantly improved. I refactored the JSON structures for tools such as &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;, and others, removing unnecessary nesting introduced during the previous GSoC. This makes their outputs much easier to consume directly in &amp;lt;b&amp;gt;Python&amp;lt;/b&amp;gt; or with &amp;lt;b&amp;gt;pandas&amp;lt;/b&amp;gt;. In addition, JSON support has been extended to many essential and frequently used modules, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;, and many more. I also added detailed documentation of the JSON schema and provided examples showing how to parse and use these outputs effectively with Python and pandas. Together, these improvements make the adoption of GRASS in modern &amp;lt;b&amp;gt;data science workflows&amp;lt;/b&amp;gt; far more seamless and accessible.&lt;br /&gt;
&lt;br /&gt;
=== Enhancements made per tool ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;: Simplified JSON structure for univariate statistics, removed unnecessary hierarchy, and added new output format options (CSV, shell).&lt;br /&gt;
* &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;: Added JSON support for querying raster map colors, with a Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;: Added JSON support for reporting the current mapset, with a Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;: Updated JSON structure for raster map metadata, removing hierarchy for easier parsing. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;: Simplified JSON output for geographic region boundaries, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;: Added JSON support for GRASS version information, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;: Added JSON support for listing imagery groups, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;: Added JSON and CSV support for raster area statistics, with Python and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;: Refined JSON schema for nearest element queries, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;: Added JSON support for listing GRASS database files, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;: Updated JSON schema for printing vector attribute values, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;: Simplified JSON output, added CSV support, and included a matplotlib example for profile visualization.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;: Updated JSON schema for linear regression between rasters, with Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;: Updated JSON schema for category quantiles, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;: Added JSON support for raster volume calculations, fixed missing headers in CSV output, and provided pandas examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.columns&amp;lt;/code&amp;gt;: Added JSON output for listing database table columns, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;: Added JSON output for measuring lengths and areas, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.connect&amp;lt;/code&amp;gt;: Added JSON output for DB connection info, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.multi&amp;lt;/code&amp;gt;: Added JSON output for multiple regression between rasters, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.db.connect&amp;lt;/code&amp;gt;: Added JSON output for vector map attribute connections, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.findfile&amp;lt;/code&amp;gt;: Added JSON output for GRASS database file search, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;: Added JSON output for 3D raster map info, with Python example. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;: Added JSON output for extracting raster values at vector points, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt;: Added JSON and CSV support for locating closest points between raster objects, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;: Added JSON and CSV support for attribute data, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;: Migrated from manually written JSON to Parson-based JSON output, simplified schema, and provided Python parsing examples.&lt;br /&gt;
&lt;br /&gt;
All these changes were accompanied by regression tests to ensure that new JSON/CSV/SHELL/PLAIN output options do not break existing functionality. Additionally, I introduced comprehensive Python test cases for these outputs, making the enhancements reliable and future-proof. During this work, I also fixed several bugs in modules such as &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;, strengthening the stability of GRASS as a whole.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
To sum up, I’m glad to have met the three core objectives of my project with the constant support of my mentors:&lt;br /&gt;
&lt;br /&gt;
* Brought JSON output to several important and long-requested modules, added regression tests, and ensured reliable future test coverage.&lt;br /&gt;
* Enhanced the JSON schema introduced in last year’s GSoC by reducing unnecessary hierarchy, making it more consistent across tools, and providing Python/Pandas examples for practical use.&lt;br /&gt;
* Expanded &amp;lt;b&amp;gt;CSV&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;SHELL&amp;lt;/b&amp;gt; output formats to additional tools where they could bring value.&lt;br /&gt;
&lt;br /&gt;
This journey has been both rewarding and educational, and I’m grateful for the opportunity to contribute to GRASS through GSoC 2025. I especially want to thank &amp;lt;b&amp;gt;Anna Petrasova&amp;lt;/b&amp;gt; and the GRASS Development Team for their guidance and support. I’m excited to keep building on this work and further extend JSON and other features in the future.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
There is significant scope to extend structured output support across GRASS tools. In particular, future efforts should focus on:&lt;br /&gt;
* Expanding JSON output to additional modules, with details tracked here: [https://github.com/orgs/OSGeo/projects/10 GRASS JSON Outputs Project].&lt;br /&gt;
* Refining and standardizing the JSON schema to better support complex workflows and integrations.&lt;br /&gt;
* Exploring and implementing other output formats (e.g., SHELL, CSV, PLAIN) where they can improve usability and automation.&lt;br /&gt;
I also plan to continue contributing to GRASS by extending JSON support to more modules and engaging in community discussions around schema design and format integration.&lt;br /&gt;
&lt;br /&gt;
== Log of Pull Requests ==&lt;br /&gt;
Below is a list of pull requests submitted to the GRASS repository during GSoC 2025:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pull Request !! Description  !! Date   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5688 #5688] || r.univar: Fix JSON structure || May 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5773 #5773] || r.what.color: Add test file || May 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5775 #5775] || g.mapset: Add test file || May 26, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5784 #5784] || r.info: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;Closed&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5785 #5785] || g.region: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5810 #5810] || g.mapset: Add JSON support || June 2, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5821 #5821] || r.univar: Fix uninitialized zone_value || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5822 #5822] || r.what.color: Add JSON support || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5842 #5842] || r.info: Update test file || June 5, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5859 #5859] || r.info: Improve interface || June 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5863 #5863] || g.version: Add JSON support || June 9, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5870 #5870] || i.group: Add JSON support || June 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5879 #5879] || r.stats: Add test file || June 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5892 #5892] || r.stats: Add tests for JSON output || June 14, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5898 #5898] || v.distance: Update JSON format || June 16, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5900 #5900] || r.stats: fix uninitialised window value || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5906 #5906] || g.list: Add test file || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5921 #5921] || g.list: Add JSON support || June 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5929 #5929] || g.region: Update JSON format || June 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5946 #5946] || v.to.db: Update JSON format || June 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5962 #5962] || r.profile: Update JSON format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5966 #5966] || r.univar: Add shell and CSV format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5990 #5990] || r.regression.line: Add test file || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5993 #5993] || r.regression.line: Add JSON support || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6002 #6002] || r.stats.quantile: Add test file || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6007 #6007] || r.stats.quantile: Add JSON support || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6027 #6027] || r.volume: Add test file || July 4, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6036 #6036] || r.volume: Add JSON support || July 6, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6042 #6042] || db.columns: Add JSON support || July 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6051 #6051] || m.measure: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6052 #6052] || db.connect: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6053 #6053] || m.measure: Add JSON support || July 11, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6059 #6059] || db.connect: Add JSON support || July 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6066 #6066] || r.regression.multi: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6067 #6067] || v.db.connect: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6075 #6075] || r.regression.multi: Add JSON support || July 18, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6077 #6077] || v.db.connect: Add JSON support || July 19, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6091 #6091] || g.findfile: Add JSON support || July 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6098 #6098] || r3.info: Add test file || July 22, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6103 #6103] || r3.info: Add JSON support || July 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6109 #6109] || v.what.rast: Add test file || July 24, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6132 #6132] || v.category: Use CSV format instead of shell format || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6133 #6133] || r.stats: add CSV support || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6134 #6134] || r.volume: add csv column headers || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6140 #6140] || v.what.rast: Add JSON support || July 29, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6145 #6145] || r.profile: Add CSV support || July 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6150 #6150] || r.distance: Update existing test cases || August 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6204 #6204] || r.distance: Add JSON and CSV support || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6205 #6205] || v.class: Add more test cases and fix out-of-bounds bug || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6210 #6210] || v.class: Add JSON and CSV support || August 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6252 #6252] || v.what: Update JSON output format || August 23, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Additional Links ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Ttile&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| OSGeo Wiki Page&lt;br /&gt;
| [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C Add JSON output to different tools in C for GRASS]&lt;br /&gt;
|-&lt;br /&gt;
| Github Fork&lt;br /&gt;
| [https://github.com/NishantBansal2003/grass GitHub Fork]&lt;br /&gt;
|-&lt;br /&gt;
| GSoC Page&lt;br /&gt;
| [https://summerofcode.withgoogle.com/programs/2025/projects/GPVGd3DH Link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples &amp;amp; Images ==&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; JSON output in Python ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; can be directly loaded into a pandas DataFrame and used for plotting with matplotlib.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
# Run r.profile command&lt;br /&gt;
elevation = gs.read_command(&lt;br /&gt;
    &amp;quot;r.profile&amp;quot;,&lt;br /&gt;
    input=&amp;quot;elevation&amp;quot;,&lt;br /&gt;
    coordinates=&amp;quot;641712,226095,641546,224138,641546,222048,641049,221186&amp;quot;,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
    flags=&amp;quot;gc&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Load the JSON data into a dataframe&lt;br /&gt;
df = pd.read_json(elevation)&lt;br /&gt;
print(df)&lt;br /&gt;
&lt;br /&gt;
# Create the scatter plot&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
plt.scatter(df[&amp;quot;distance&amp;quot;], df[&amp;quot;value&amp;quot;], c=df[&amp;quot;color&amp;quot;], marker=&amp;quot;o&amp;quot;)&lt;br /&gt;
plt.title(&amp;quot;Profile of Distance vs. Elevation with Color Coding&amp;quot;)&lt;br /&gt;
plt.xlabel(&amp;quot;Distance (meters)&amp;quot;)&lt;br /&gt;
plt.ylabel(&amp;quot;Elevation&amp;quot;)&lt;br /&gt;
plt.grid(True)&lt;br /&gt;
plt.show()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame Output (first 10 rows) ====  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
         easting       northing   distance      value    color&lt;br /&gt;
0  641712.000000  226095.000000   0.000000  84.661507  #71FF00&lt;br /&gt;
1  641711.154826  226085.036106   9.999675  84.511765  #6FFF00&lt;br /&gt;
2  641710.309651  226075.072213  19.999349  84.241806  #6BFF00&lt;br /&gt;
3  641709.464477  226065.108319  29.999024  84.304214  #6CFF00&lt;br /&gt;
4  641708.619302  226055.144426  39.998699  84.174400  #6AFF00&lt;br /&gt;
5  641707.774128  226045.180532  49.998374  84.112534  #6AFF00&lt;br /&gt;
6  641706.928954  226035.216639  59.998048  84.011208  #68FF00&lt;br /&gt;
7  641706.083779  226025.252745  69.997723  83.834084  #66FF00&lt;br /&gt;
8  641705.238605  226015.288851  79.997398  83.870193  #67FF00&lt;br /&gt;
9  641704.393430  226005.324958  89.997073  84.194908  #6BFF00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Visualization ====  &lt;br /&gt;
&lt;br /&gt;
Matplotlib scatter plot generated from the &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; JSON output: &lt;br /&gt;
&lt;br /&gt;
[[File:R profile plot.png]]&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt; can be directly loaded into a pandas DataFrame.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.class&amp;quot;,&lt;br /&gt;
    map=&amp;quot;bridges&amp;quot;,&lt;br /&gt;
    column=&amp;quot;YEAR_BUILT&amp;quot;,&lt;br /&gt;
    algorithm=&amp;quot;std&amp;quot;,&lt;br /&gt;
    nbclasses=5,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data[&amp;quot;intervals&amp;quot;])&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output (intervals) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
          from           to  frequency&lt;br /&gt;
0  1891.000000  1938.829689        750&lt;br /&gt;
1  1938.829689  1954.722836       1841&lt;br /&gt;
2  1954.722836  1970.615983       5556&lt;br /&gt;
3  1970.615983  1986.509130       1788&lt;br /&gt;
4  1986.509130  1997.000000       1003&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame to display categories and values.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.what.rast&amp;quot;, map=&amp;quot;bridges&amp;quot;, raster=&amp;quot;elevation&amp;quot;, flags=&amp;quot;p&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    category       value&lt;br /&gt;
0       4635   86.851212&lt;br /&gt;
1       4648   87.883255&lt;br /&gt;
2       4688  103.382004&lt;br /&gt;
3       4709   67.387856&lt;br /&gt;
4       4986   90.972832&lt;br /&gt;
5       4991   86.550629&lt;br /&gt;
6       5027   84.256355&lt;br /&gt;
7       5060   79.500443&lt;br /&gt;
8       5071   78.732864&lt;br /&gt;
9       5089   85.703636&lt;br /&gt;
10      5096  115.967323&lt;br /&gt;
11      5130   81.055870&lt;br /&gt;
12      5150   92.812927&lt;br /&gt;
13      5166   88.149483&lt;br /&gt;
14      5184   76.426331&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test Suite Update ====&lt;br /&gt;
Added 6 tests to the test suite, including both regression tests and future-proof tests to ensure functionality remains reliable in future updates.&lt;br /&gt;
&lt;br /&gt;
[[File:V what rast test file.png|800px]]&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame to locate closest points.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
&lt;br /&gt;
result = gs.parse_command(&lt;br /&gt;
    &amp;quot;r.distance&amp;quot;, map=[&amp;quot;zipcodes&amp;quot;, &amp;quot;lakes&amp;quot;], flags=&amp;quot;l&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
df = pd.json_normalize(result)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output (first 10 rows, truncated) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
       distance  from_cell.category  from_cell.easting  ...  to_cell.easting to_cell.northing  to_cell.label&lt;br /&gt;
0  11158.507466               27511      632604.951740  ...    640584.676990    215499.220687       Dam/Weir&lt;br /&gt;
1   1037.271198               27511      631734.981693  ...    632314.961724    221839.026534      Lake/Pond&lt;br /&gt;
2   2276.988836               27511      630015.040913  ...    630765.015090    219459.099418      Reservoir&lt;br /&gt;
3  14614.155031               27513      631055.005106  ...    640584.676990    215499.220687       Dam/Weir&lt;br /&gt;
4   3635.876453               27513      631674.983759  ...    635164.863600    227198.862392      Lake/Pond&lt;br /&gt;
5   6971.335517               27513      630005.041257  ...    630765.015090    219459.099418      Reservoir&lt;br /&gt;
6   8978.927486               27518      632134.967922  ...    640424.682499    215209.229568       Dam/Weir&lt;br /&gt;
7      0.000000               27518      630005.041257  ...    630005.041257    220199.076757      Lake/Pond&lt;br /&gt;
8    699.975899               27518      630005.041257  ...    630705.017156    219379.101868      Reservoir&lt;br /&gt;
9    509.197766               27529      641154.657366  ...    640674.673892    215249.228343       Dam/Weir&lt;br /&gt;
&lt;br /&gt;
[10 rows x 9 columns]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.distance&amp;quot;,&lt;br /&gt;
    flags=&amp;quot;p&amp;quot;,&lt;br /&gt;
    from_=&amp;quot;busroute_a&amp;quot;,&lt;br /&gt;
    to=&amp;quot;busstopsall&amp;quot;,&lt;br /&gt;
    upload=&amp;quot;dist,to_attr&amp;quot;,&lt;br /&gt;
    to_column=&amp;quot;routes&amp;quot;,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
   from_cat  to_cat      dist to_attr&lt;br /&gt;
0         1     112  0.142812     8,A&lt;br /&gt;
1         2      44  0.102327     9,A&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;r.volume&amp;quot;, input=&amp;quot;elevation&amp;quot;, clump=&amp;quot;geology_30m&amp;quot;, flags=&amp;quot;p&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    category  average         sum   cells        volume  easting  northing&lt;br /&gt;
0        217   118.93 86288827.99  725562 8628882798.63   635325    221535&lt;br /&gt;
1        262   108.97 21650560.37  198684 2165056037.02   638935    222495&lt;br /&gt;
2        270    92.23 63578874.44  689373 6357887443.53   642405    221485&lt;br /&gt;
3        405   132.96 33732662.09  253710 3373266208.59   631835    224095&lt;br /&gt;
4        583   139.35  3011288.22   21609  301128821.55   630205    224665&lt;br /&gt;
5        720   124.30   599618.16    4824   59961816.06   634075    227995&lt;br /&gt;
6        766   132.43   936791.20    7074   93679120.08   631425    227845&lt;br /&gt;
7        862   118.31  7302317.47   61722  730231746.74   630505    218885&lt;br /&gt;
8        910    94.20  4235816.13   44964  423581613.11   639215    216365&lt;br /&gt;
9        921   135.22  1693985.23   12528  169398523.05   630755    215445&lt;br /&gt;
10       945   127.24     1145.12       9     114512.03   630015    215015&lt;br /&gt;
11       946    89.91   365748.34    4068   36574833.85   639085    215255&lt;br /&gt;
12       948   129.02   112631.82     873   11263181.57   630185    215115&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{GSoC}}&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28678</id>
		<title>GRASS GSoC 2025 Add JSON output to different tools in C</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28678"/>
		<updated>2025-08-24T07:50:08Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: /* Test Suite Update */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Nishant Bansal&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo - Open Source Geospatial Foundation]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/NishantBansal2003/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''GSoC proposal''' || [https://docs.google.com/document/d/1ZPQ9RXU7b_RUDmBmAMeK7ZjFAV1WC7Urd1Zlz678jyw/edit?tab=t.0#heading=h.z6ne0og04bp5 View Proposal]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Abstract =&lt;br /&gt;
Currently, most GRASS tools produce data in plain text by default. This means that users who want to process the output in Python need to create custom parsing code. To make this easier, several modules could be improved by oﬀering JSON as an alternative output format. Recently, the Parson library was added to the GRASS codebase to support JSON output in addition to plain text. Building on the advancements made during the last GSoC, my project aims to expand JSON output capabilities to more tools using the Parson library. I will also work on making the JSON structure introduced in the previous GSoC more useful and consistent. Additionally, I plan to add support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
&lt;br /&gt;
# Working with mentors to finalize the structure of the JSON output.&lt;br /&gt;
# Adding an option to choose the output format (plain text or JSON) for each updated tool.&lt;br /&gt;
# Make the JSON structure introduced during the last GSoC more useful and consistent across tools.&lt;br /&gt;
# Developing Python test cases to ensure that the JSON output works correctly and to avoid future issues.&lt;br /&gt;
# Providing basic documentation and example JSON outputs for each modified tool.&lt;br /&gt;
# Adding support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
# Develop simple examples demonstrating how to use JSON output in a data science workflow, such as reading JSON data into pandas or python.&lt;br /&gt;
&lt;br /&gt;
= Timeline =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Period !! Timeline  !! Tasks   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period &lt;br /&gt;
||&lt;br /&gt;
May 8 - June 1  &lt;br /&gt;
|| &lt;br /&gt;
# Reviewed the work done during the last GSoC to stabilize the JSON output.&lt;br /&gt;
# Discussed the priority tools for adding JSON support.&lt;br /&gt;
# Read GRASS documentation to add Python and JSON examples to the documentation.&lt;br /&gt;
|| &lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;13&amp;quot; | Official Coding Period &lt;br /&gt;
|-&lt;br /&gt;
| '''Week 1''' (June 2 - June 8) || &lt;br /&gt;
# Add JSON support for g.mapset [https://github.com/OSGeo/grass/pull/5810 #5810]&lt;br /&gt;
# Fix uninitialized zone_value in r.univar [https://github.com/OSGeo/grass/pull/5821 #5821]&lt;br /&gt;
# Add JSON support for r.what.color [https://github.com/OSGeo/grass/pull/5822 #5822]&lt;br /&gt;
# Update test file in r.info [https://github.com/OSGeo/grass/pull/5842 #5842]&lt;br /&gt;
# Improve interface for r.info [https://github.com/OSGeo/grass/pull/5859 #5859]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 2''' (June 9 - June 15) ||&lt;br /&gt;
# Add JSON support for g.version [https://github.com/OSGeo/grass/pull/5863 #5863]&lt;br /&gt;
# Add JSON support for i.group [https://github.com/OSGeo/grass/pull/5870 #5870]&lt;br /&gt;
# Add test file in r.stats [https://github.com/OSGeo/grass/pull/5879 #5879]&lt;br /&gt;
# Add tests for JSON output in r.stats [https://github.com/OSGeo/grass/pull/5892 #5892]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 3''' (June 16 - June 22) ||&lt;br /&gt;
# Update the JSON output schema of v.distance [https://github.com/OSGeo/grass/pull/5898 #5898]&lt;br /&gt;
# Fix uninitialized window variable in r.stats [https://github.com/OSGeo/grass/pull/5900 #5900]&lt;br /&gt;
# Add test file in g.list [https://github.com/OSGeo/grass/pull/5906 #5906]&lt;br /&gt;
# Add JSON support for g.list [https://github.com/OSGeo/grass/pull/5921 #5921]&lt;br /&gt;
# Update the JSON output schema of g.region [https://github.com/OSGeo/grass/pull/5929 #5929]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 4''' (June 23 - June 29) ||&lt;br /&gt;
# Update the JSON output schema of v.to.db [https://github.com/OSGeo/grass/pull/5946 #5946]&lt;br /&gt;
# Update the JSON output schema of r.profile [https://github.com/OSGeo/grass/pull/5962 #5962]&lt;br /&gt;
# Add SHELL and CSV output support for r.univar [https://github.com/OSGeo/grass/pull/5966 #5966]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 5''' (June 30 - July 6) ||&lt;br /&gt;
# Add test file in r.regression.line [https://github.com/OSGeo/grass/pull/5990 #5990]&lt;br /&gt;
# Add JSON support for r.regression.line [https://github.com/OSGeo/grass/pull/5993 #5993]&lt;br /&gt;
# Add test file in r.stats.quantile [https://github.com/OSGeo/grass/pull/6002 #6002]&lt;br /&gt;
# Add JSON support for r.stats.quantile [https://github.com/OSGeo/grass/pull/6007 #6007]&lt;br /&gt;
# Add test file in r.volume [https://github.com/OSGeo/grass/pull/6027 #6027]&lt;br /&gt;
# Add JSON support for r.volume [https://github.com/OSGeo/grass/pull/6036 #6036]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 6''' (July 7 - July 13) ||&lt;br /&gt;
# Add JSON support for db.columns [https://github.com/OSGeo/grass/pull/6042 #6042]&lt;br /&gt;
# Add test file in m.measure [https://github.com/OSGeo/grass/pull/6051 #6051]&lt;br /&gt;
# Add test file in db.connect [https://github.com/OSGeo/grass/pull/6052 #6052]&lt;br /&gt;
# Add JSON support for m.measure [https://github.com/OSGeo/grass/pull/6053 #6053]&lt;br /&gt;
# Add JSON support for db.connect [https://github.com/OSGeo/grass/pull/6059 #6059]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | '''Week 7''' (July 14 - July 20) ||&lt;br /&gt;
# Add test file in r.regression.multi [https://github.com/OSGeo/grass/pull/6066 #6066]&lt;br /&gt;
# Add test file in v.db.connect [https://github.com/OSGeo/grass/pull/6067 #6067]&lt;br /&gt;
# Add JSON support for r.regression.multi [https://github.com/OSGeo/grass/pull/6075 #6075]&lt;br /&gt;
# Add JSON support for v.db.connect [https://github.com/OSGeo/grass/pull/6077 #6077]&lt;br /&gt;
# Submit MidTerm evaluation.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 8''' (July 21 - July 27) ||&lt;br /&gt;
# Add JSON support for g.findfile [https://github.com/OSGeo/grass/pull/6091 #6091]&lt;br /&gt;
# Add test file in r3.info [https://github.com/OSGeo/grass/pull/6098 #6098]&lt;br /&gt;
# Add JSON support for r3.info [https://github.com/OSGeo/grass/pull/6103 #6103]&lt;br /&gt;
# Add test file in v.what.rast [https://github.com/OSGeo/grass/pull/6109 #6109]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 9''' (July 28 - August 3) ||&lt;br /&gt;
# Update format to CSV instead of shell in v.category [https://github.com/OSGeo/grass/pull/6132 #6132]&lt;br /&gt;
# Add CSV output support to r.stats [https://github.com/OSGeo/grass/pull/6133 #6133]&lt;br /&gt;
# Add CSV headers to r.volume [https://github.com/OSGeo/grass/pull/6134 #6134]&lt;br /&gt;
# Add JSON support for v.what.rast [https://github.com/OSGeo/grass/pull/6140 #6140]&lt;br /&gt;
# Add CSV output support to r.profile [https://github.com/OSGeo/grass/pull/6145 #6145]&lt;br /&gt;
# Update test cases in r.distance [https://github.com/OSGeo/grass/pull/6150 #6150]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 10''' (August 4 - August 10) ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 11''' (August 11 - August 17) ||&lt;br /&gt;
# Add JSON and CSV support for r.distance [https://github.com/OSGeo/grass/pull/6204 #6204]&lt;br /&gt;
# Add more test cases in v.class [https://github.com/OSGeo/grass/pull/6205 #6205]&lt;br /&gt;
# Add JSON and CSV support for v.class [https://github.com/OSGeo/grass/pull/6210 #6210]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 12''' (August 18 - August 24) ||&lt;br /&gt;
# Update JSON output format for v.what [https://github.com/OSGeo/grass/pull/6252 #6252]&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Evaluation Period &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | August 25 - September 1 ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
# Submit code, final evaluation and write the final GSoC report.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Reports =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* Introduced myself on the [https://discourse.osgeo.org/t/gsoc-2025-introduction-nishant-bansal/147005 OSGeo Discourse mailing list].&lt;br /&gt;
* Created both my [https://wiki.osgeo.org/wiki/User:Nishantbansal2003 personal Wiki page] and the [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C project Wiki page], adding all necessary project-related information.&lt;br /&gt;
* Read GRASS documentation to support the addition of Python and JSON examples.&lt;br /&gt;
* Worked on the following pull requests:&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5688 #5688]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5773 #5773]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5775 #5775]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5784 #5784]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5785 #5785]&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to the g.mapset and r.what.color modules.&lt;br /&gt;
* If time permits, I will begin improving the r.info interface: [https://github.com/OSGeo/grass/issues/5793 Issue #5793]&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
'''Project Discussions and Meetings'''&lt;br /&gt;
* '''14 May 2025''': Introductory meeting discussing JSON support and overall project milestones.&lt;br /&gt;
* '''21 May 2025''': Introduction with fellow developers. Discussed priority tools, adding Python/Pandas examples, and approaches for finalizing the JSON schema for each module.&lt;br /&gt;
&lt;br /&gt;
== Week-1 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.mapset''': Added JSON output support, now you can use -p and -l flags to get JSON-formatted results.&lt;br /&gt;
* '''r.univar''': Fixed a bug causing an uninitialized zone_value.&lt;br /&gt;
* '''r.what.color''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5822 #5822])&lt;br /&gt;
* '''r.info (regression tests)''': To maintain backward compatibility while updating its interface, I added strong regression tests.&lt;br /&gt;
* '''r.info (interface improvements)''': Began improving the module’s interface. (See PR [https://github.com/OSGeo/grass/pull/5859 #5859])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.version (see issue [https://github.com/OSGeo/grass/issues/5816 #5816]).&lt;br /&gt;
* Add JSON output support to i.group (see issue [https://github.com/OSGeo/grass/issues/5815 #5815]).&lt;br /&gt;
* If time permits, write tests for r.stats (see issue [https://github.com/OSGeo/grass/issues/5814 #5814]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-2 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.version''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5863 #5863])&lt;br /&gt;
* '''i.group''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5870 #5870])&lt;br /&gt;
* '''r.stats (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats''': Added tests for JSON output; this uncovered a bug, which was fixed alongside.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.distance (see issue [https://github.com/OSGeo/grass/issues/5846 #5846]).&lt;br /&gt;
* Add JSON output support to g.list (see issue [https://github.com/OSGeo/grass/issues/5848 #5848]).&lt;br /&gt;
* If time permits, fix the JSON output format of g.region (see issue [https://github.com/OSGeo/grass/issues/5828 #5828]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-3 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.distance''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5898 #5898])&lt;br /&gt;
* '''r.stats''': Fixed a bug causing an uninitialized &amp;lt;code&amp;gt;window&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
* '''g.list (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''g.list''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5921 #5921])&lt;br /&gt;
* '''g.region''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5929 #5929])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.to.db (see issue [https://github.com/OSGeo/grass/pull/5711 #5711]).&lt;br /&gt;
* Update JSON output format and documentation of r.profile (see issue [https://github.com/OSGeo/grass/pull/5834 #5834]).&lt;br /&gt;
* If time permits, add shell and csv output formats to r.univar (see issue [https://github.com/OSGeo/grass/pull/5824 #5824]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-4 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.to.db''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5946 #5946])&lt;br /&gt;
* '''r.profile''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5962 #5962])&lt;br /&gt;
* '''r.univar''': Implemented SHELL and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/5966 #5966])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.regression.line (see issue [https://github.com/OSGeo/grass/pull/5950 #5950]).&lt;br /&gt;
* Add JSON output support to r.stats.quantile (see issue [https://github.com/OSGeo/grass/pull/5951 #5951]).&lt;br /&gt;
* Add JSON output support to r.volume (see issue [https://github.com/OSGeo/grass/pull/5949 #5949]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-5 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.line (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.line''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5993 #5993])&lt;br /&gt;
* '''r.stats.quantile (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats.quantile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6007 #6007])&lt;br /&gt;
* '''r.volume (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.volume''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6036 #6036])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to m.measure (see issue [https://github.com/OSGeo/grass/pull/6006 #6006]).&lt;br /&gt;
* Add JSON output support to db.columns (see issue [https://github.com/OSGeo/grass/pull/6008 #6008]).&lt;br /&gt;
* Add JSON output support to db.connect (see issue [https://github.com/OSGeo/grass/pull/6009 #6009]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-6 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''db.columns''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6042 #6042])&lt;br /&gt;
* '''m.measure (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''m.measure''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6053 #6053])&lt;br /&gt;
* '''db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6059 #6059])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to v.db.connect (see issue [https://github.com/OSGeo/grass/pull/6014 #6014]).&lt;br /&gt;
* Add JSON output support to r.regression.multi (see issue [https://github.com/OSGeo/grass/pull/6010 #6010]).&lt;br /&gt;
* If time permits, add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* If time permits, add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-7 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.multi (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''v.db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.multi''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6075 #6075])&lt;br /&gt;
* '''v.db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6077 #6077])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* Add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
* If time permits, add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-8 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.findfile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6091 #6091])&lt;br /&gt;
* '''r3.info (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a flag-handling bug.&lt;br /&gt;
* '''r3.info''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6103 #6103])&lt;br /&gt;
* '''v.what.rast (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a sorting bug.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
* Update format to CSV instead of shell in v.category (see issue [https://github.com/OSGeo/grass/pull/6025 #6025]).&lt;br /&gt;
* Add CSV output support to r.stats (see issue [https://github.com/OSGeo/grass/issues/5835 #5835]).&lt;br /&gt;
* If time permits, add CSV output support to r.profile (see issue [https://github.com/OSGeo/grass/issues/5958 #5958]).&lt;br /&gt;
* If time permits, add CSV headers to r.volume (see issue [https://github.com/OSGeo/grass/issues/6049 #6049]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I don’t have any blockers this week. However, I’ll be a little busy with some personal work from August 3 to August 10, so I’ll try to complete next week’s tasks this week itself.&lt;br /&gt;
&lt;br /&gt;
== Week-9 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.category''': Updated format to CSV instead of shell. (See PR [https://github.com/OSGeo/grass/pull/6132 #6132])&lt;br /&gt;
* '''r.stats''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6133 #6133])&lt;br /&gt;
* '''r.volume''': Implemented CSV column headers support. (See PR [https://github.com/OSGeo/grass/pull/6134 #6134])&lt;br /&gt;
* '''v.what.rast''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6140 #6140])&lt;br /&gt;
* '''r.profile''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6145 #6145])&lt;br /&gt;
* '''r.distance (regression tests)''': Updated regression tests to ensure backward compatibility with new JSON support. (See PR [https://github.com/OSGeo/grass/pull/6150 #6150])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* I’ll be a bit busy with some personal work from August 3 to 10, so I completed next week’s tasks last week itself. I’ve already informed my mentors about my limited availability.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* Yes, I’ll be a bit busy with some personal work from August 3 to 10.&lt;br /&gt;
&lt;br /&gt;
== Week-10 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* This week I was busy with some personal work, so I did not complete any additional tasks. However, I had already finished this week’s tasks last week. This week, I mostly focused on handling reviews for those PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.distance (see issue [https://github.com/OSGeo/grass/issues/6135 #6135]).&lt;br /&gt;
* Add JSON output support to v.class (see issue [https://github.com/OSGeo/grass/issues/6136 #6136]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-11 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.distance''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6204 #6204])&lt;br /&gt;
* '''v.class''': Updated regression tests to ensure backward compatibility with new JSON support and fixed a out-of-bounds bug. (See PR [https://github.com/OSGeo/grass/pull/6205 #6205])&lt;br /&gt;
* '''v.class''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6210 #6210])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Discuss next week’s tasks with my mentors, if no issues are assigned, I’ll identify tools that currently lack JSON support and evaluate which ones are feasible to add it to.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-12 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.what''': Update JSON output format. (See PR [https://github.com/OSGeo/grass/pull/6252 #6252])&lt;br /&gt;
* Addressed review comments on my open PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
= Final Report =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Title''' || Add JSON output to different tools in C for GRASS&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo (Open Source Geospatial Foundation)]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''Program''' || Google Summer of Code 2025&lt;br /&gt;
|-&lt;br /&gt;
| '''Contributions''' || [https://github.com/OSGeo/grass/pulls?q=is%3Apr+author%3ANishantBansal2003+ Pull Requests]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
During my GSoC project, I addressed the challenge that most GRASS tools produced only plain text output, forcing users to write custom parsing code for Python-based workflows. The task was to make these tools more data-science friendly by adding structured output formats. To achieve this, I extended the use of the Parson library to implement consistent JSON output across multiple modules, refined the JSON structure introduced in the previous GSoC, and added optional support for SHELL and CSV outputs where appropriate. I developed comprehensive Python test cases, ensured backward compatibility, and provided documentation with practical examples such as loading JSON into pandas. As a result, GRASS users can now directly consume structured outputs in modern workflows, reducing parsing overhead, improving interoperability, and paving the way for broader adoption of GRASS in data science contexts.&lt;br /&gt;
&lt;br /&gt;
== The state of integration BEFORE the start of GSoC ==&lt;br /&gt;
Before the start of GSoC, the integration of GRASS with data science workflows was limited due to several challenges. The JSON outputs introduced in the previous GSoC contained deeply nested hierarchies, making them difficult to use directly with libraries such as '''pandas''' or in broader data science pipelines. While some tools already supported JSON (e.g., &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;), many important and highly demanded modules lacked JSON support, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt; and many more. This lack of consistency limited the seamless adoption of GRASS in analytics and machine learning contexts. Moreover, there was no clear '''documentation of the JSON schema''' or guidance on how to parse and utilize these outputs effectively in '''python or pandas''', which made it difficult for users to understand the use cases and integrate GRASS outputs into modern data science workflows.&lt;br /&gt;
&lt;br /&gt;
== The state of integration AFTER GSoC ==&lt;br /&gt;
&lt;br /&gt;
After GSoC, the integration state of JSON and alternative output formats in GRASS has significantly improved. I refactored the JSON structures for tools such as &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;, and others, removing unnecessary nesting introduced during the previous GSoC. This makes their outputs much easier to consume directly in &amp;lt;b&amp;gt;Python&amp;lt;/b&amp;gt; or with &amp;lt;b&amp;gt;pandas&amp;lt;/b&amp;gt;. In addition, JSON support has been extended to many essential and frequently used modules, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;, and many more. I also added detailed documentation of the JSON schema and provided examples showing how to parse and use these outputs effectively with Python and pandas. Together, these improvements make the adoption of GRASS in modern &amp;lt;b&amp;gt;data science workflows&amp;lt;/b&amp;gt; far more seamless and accessible.&lt;br /&gt;
&lt;br /&gt;
=== Enhancements made per tool ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;: Simplified JSON structure for univariate statistics, removed unnecessary hierarchy, and added new output format options (CSV, shell).&lt;br /&gt;
* &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;: Added JSON support for querying raster map colors, with a Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;: Added JSON support for reporting the current mapset, with a Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;: Updated JSON structure for raster map metadata, removing hierarchy for easier parsing. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;: Simplified JSON output for geographic region boundaries, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;: Added JSON support for GRASS version information, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;: Added JSON support for listing imagery groups, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;: Added JSON and CSV support for raster area statistics, with Python and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;: Refined JSON schema for nearest element queries, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;: Added JSON support for listing GRASS database files, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;: Updated JSON schema for printing vector attribute values, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;: Simplified JSON output, added CSV support, and included a matplotlib example for profile visualization.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;: Updated JSON schema for linear regression between rasters, with Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;: Updated JSON schema for category quantiles, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;: Added JSON support for raster volume calculations, fixed missing headers in CSV output, and provided pandas examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.columns&amp;lt;/code&amp;gt;: Added JSON output for listing database table columns, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;: Added JSON output for measuring lengths and areas, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.connect&amp;lt;/code&amp;gt;: Added JSON output for DB connection info, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.multi&amp;lt;/code&amp;gt;: Added JSON output for multiple regression between rasters, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.db.connect&amp;lt;/code&amp;gt;: Added JSON output for vector map attribute connections, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.findfile&amp;lt;/code&amp;gt;: Added JSON output for GRASS database file search, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;: Added JSON output for 3D raster map info, with Python example. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;: Added JSON output for extracting raster values at vector points, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt;: Added JSON and CSV support for locating closest points between raster objects, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;: Added JSON and CSV support for attribute data, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;: Migrated from manually written JSON to Parson-based JSON output, simplified schema, and provided Python parsing examples.&lt;br /&gt;
&lt;br /&gt;
All these changes were accompanied by regression tests to ensure that new JSON/CSV/SHELL/PLAIN output options do not break existing functionality. Additionally, I introduced comprehensive Python test cases for these outputs, making the enhancements reliable and future-proof. During this work, I also fixed several bugs in modules such as &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;, strengthening the stability of GRASS as a whole.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
To sum up, I’m glad to have met the three core objectives of my project with the constant support of my mentors:&lt;br /&gt;
&lt;br /&gt;
* Brought JSON output to several important and long-requested modules, added regression tests, and ensured reliable future test coverage.&lt;br /&gt;
* Enhanced the JSON schema introduced in last year’s GSoC by reducing unnecessary hierarchy, making it more consistent across tools, and providing Python/Pandas examples for practical use.&lt;br /&gt;
* Expanded &amp;lt;b&amp;gt;CSV&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;SHELL&amp;lt;/b&amp;gt; output formats to additional tools where they could bring value.&lt;br /&gt;
&lt;br /&gt;
This journey has been both rewarding and educational, and I’m grateful for the opportunity to contribute to GRASS through GSoC 2025. I especially want to thank &amp;lt;b&amp;gt;Anna Petrasova&amp;lt;/b&amp;gt; and the GRASS Development Team for their guidance and support. I’m excited to keep building on this work and further extend JSON and other features in the future.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
There is significant scope to extend structured output support across GRASS tools. In particular, future efforts should focus on:&lt;br /&gt;
* Expanding JSON output to additional modules, with details tracked here: [https://github.com/orgs/OSGeo/projects/10 GRASS JSON Outputs Project].&lt;br /&gt;
* Refining and standardizing the JSON schema to better support complex workflows and integrations.&lt;br /&gt;
* Exploring and implementing other output formats (e.g., SHELL, CSV, PLAIN) where they can improve usability and automation.&lt;br /&gt;
I also plan to continue contributing to GRASS by extending JSON support to more modules and engaging in community discussions around schema design and format integration.&lt;br /&gt;
&lt;br /&gt;
== Log of Pull Requests ==&lt;br /&gt;
Below is a list of pull requests submitted to the GRASS repository during GSoC 2025:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pull Request !! Description  !! Date   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5688 #5688] || r.univar: Fix JSON structure || May 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5773 #5773] || r.what.color: Add test file || May 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5775 #5775] || g.mapset: Add test file || May 26, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5784 #5784] || r.info: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;Closed&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5785 #5785] || g.region: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5810 #5810] || g.mapset: Add JSON support || June 2, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5821 #5821] || r.univar: Fix uninitialized zone_value || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5822 #5822] || r.what.color: Add JSON support || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5842 #5842] || r.info: Update test file || June 5, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5859 #5859] || r.info: Improve interface || June 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5863 #5863] || g.version: Add JSON support || June 9, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5870 #5870] || i.group: Add JSON support || June 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5879 #5879] || r.stats: Add test file || June 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5892 #5892] || r.stats: Add tests for JSON output || June 14, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5898 #5898] || v.distance: Update JSON format || June 16, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5900 #5900] || r.stats: fix uninitialised window value || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5906 #5906] || g.list: Add test file || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5921 #5921] || g.list: Add JSON support || June 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5929 #5929] || g.region: Update JSON format || June 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5946 #5946] || v.to.db: Update JSON format || June 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5962 #5962] || r.profile: Update JSON format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5966 #5966] || r.univar: Add shell and CSV format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5990 #5990] || r.regression.line: Add test file || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5993 #5993] || r.regression.line: Add JSON support || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6002 #6002] || r.stats.quantile: Add test file || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6007 #6007] || r.stats.quantile: Add JSON support || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6027 #6027] || r.volume: Add test file || July 4, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6036 #6036] || r.volume: Add JSON support || July 6, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6042 #6042] || db.columns: Add JSON support || July 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6051 #6051] || m.measure: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6052 #6052] || db.connect: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6053 #6053] || m.measure: Add JSON support || July 11, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6059 #6059] || db.connect: Add JSON support || July 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6066 #6066] || r.regression.multi: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6067 #6067] || v.db.connect: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6075 #6075] || r.regression.multi: Add JSON support || July 18, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6077 #6077] || v.db.connect: Add JSON support || July 19, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6091 #6091] || g.findfile: Add JSON support || July 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6098 #6098] || r3.info: Add test file || July 22, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6103 #6103] || r3.info: Add JSON support || July 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6109 #6109] || v.what.rast: Add test file || July 24, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6132 #6132] || v.category: Use CSV format instead of shell format || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6133 #6133] || r.stats: add CSV support || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6134 #6134] || r.volume: add csv column headers || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6140 #6140] || v.what.rast: Add JSON support || July 29, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6145 #6145] || r.profile: Add CSV support || July 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6150 #6150] || r.distance: Update existing test cases || August 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6204 #6204] || r.distance: Add JSON and CSV support || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6205 #6205] || v.class: Add more test cases and fix out-of-bounds bug || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6210 #6210] || v.class: Add JSON and CSV support || August 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6252 #6252] || v.what: Update JSON output format || August 23, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Additional Links ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Ttile&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| OSGeo Wiki Page&lt;br /&gt;
| [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C Add JSON output to different tools in C for GRASS]&lt;br /&gt;
|-&lt;br /&gt;
| Github Fork&lt;br /&gt;
| [https://github.com/NishantBansal2003/grass GitHub Fork]&lt;br /&gt;
|-&lt;br /&gt;
| GSoC Page&lt;br /&gt;
| [https://summerofcode.withgoogle.com/programs/2025/projects/GPVGd3DH Link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples &amp;amp; Images ==&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; JSON output in Python ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; can be directly loaded into a pandas DataFrame and used for plotting with matplotlib.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
# Run r.profile command&lt;br /&gt;
elevation = gs.read_command(&lt;br /&gt;
    &amp;quot;r.profile&amp;quot;,&lt;br /&gt;
    input=&amp;quot;elevation&amp;quot;,&lt;br /&gt;
    coordinates=&amp;quot;641712,226095,641546,224138,641546,222048,641049,221186&amp;quot;,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
    flags=&amp;quot;gc&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Load the JSON data into a dataframe&lt;br /&gt;
df = pd.read_json(elevation)&lt;br /&gt;
print(df)&lt;br /&gt;
&lt;br /&gt;
# Create the scatter plot&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
plt.scatter(df[&amp;quot;distance&amp;quot;], df[&amp;quot;value&amp;quot;], c=df[&amp;quot;color&amp;quot;], marker=&amp;quot;o&amp;quot;)&lt;br /&gt;
plt.title(&amp;quot;Profile of Distance vs. Elevation with Color Coding&amp;quot;)&lt;br /&gt;
plt.xlabel(&amp;quot;Distance (meters)&amp;quot;)&lt;br /&gt;
plt.ylabel(&amp;quot;Elevation&amp;quot;)&lt;br /&gt;
plt.grid(True)&lt;br /&gt;
plt.show()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame Output (first 10 rows) ====  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
         easting       northing   distance      value    color&lt;br /&gt;
0  641712.000000  226095.000000   0.000000  84.661507  #71FF00&lt;br /&gt;
1  641711.154826  226085.036106   9.999675  84.511765  #6FFF00&lt;br /&gt;
2  641710.309651  226075.072213  19.999349  84.241806  #6BFF00&lt;br /&gt;
3  641709.464477  226065.108319  29.999024  84.304214  #6CFF00&lt;br /&gt;
4  641708.619302  226055.144426  39.998699  84.174400  #6AFF00&lt;br /&gt;
5  641707.774128  226045.180532  49.998374  84.112534  #6AFF00&lt;br /&gt;
6  641706.928954  226035.216639  59.998048  84.011208  #68FF00&lt;br /&gt;
7  641706.083779  226025.252745  69.997723  83.834084  #66FF00&lt;br /&gt;
8  641705.238605  226015.288851  79.997398  83.870193  #67FF00&lt;br /&gt;
9  641704.393430  226005.324958  89.997073  84.194908  #6BFF00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Visualization ====  &lt;br /&gt;
&lt;br /&gt;
Matplotlib scatter plot generated from the &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; JSON output: &lt;br /&gt;
&lt;br /&gt;
[[File:R profile plot.png]]&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt; can be directly loaded into a pandas DataFrame.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.class&amp;quot;,&lt;br /&gt;
    map=&amp;quot;bridges&amp;quot;,&lt;br /&gt;
    column=&amp;quot;YEAR_BUILT&amp;quot;,&lt;br /&gt;
    algorithm=&amp;quot;std&amp;quot;,&lt;br /&gt;
    nbclasses=5,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data[&amp;quot;intervals&amp;quot;])&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output (intervals) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
          from           to  frequency&lt;br /&gt;
0  1891.000000  1938.829689        750&lt;br /&gt;
1  1938.829689  1954.722836       1841&lt;br /&gt;
2  1954.722836  1970.615983       5556&lt;br /&gt;
3  1970.615983  1986.509130       1788&lt;br /&gt;
4  1986.509130  1997.000000       1003&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame to display categories and values.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.what.rast&amp;quot;, map=&amp;quot;bridges&amp;quot;, raster=&amp;quot;elevation&amp;quot;, flags=&amp;quot;p&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    category       value&lt;br /&gt;
0       4635   86.851212&lt;br /&gt;
1       4648   87.883255&lt;br /&gt;
2       4688  103.382004&lt;br /&gt;
3       4709   67.387856&lt;br /&gt;
4       4986   90.972832&lt;br /&gt;
5       4991   86.550629&lt;br /&gt;
6       5027   84.256355&lt;br /&gt;
7       5060   79.500443&lt;br /&gt;
8       5071   78.732864&lt;br /&gt;
9       5089   85.703636&lt;br /&gt;
10      5096  115.967323&lt;br /&gt;
11      5130   81.055870&lt;br /&gt;
12      5150   92.812927&lt;br /&gt;
13      5166   88.149483&lt;br /&gt;
14      5184   76.426331&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test Suite Update ====&lt;br /&gt;
Added 6 tests to the test suite, including both regression tests and future-proof tests to ensure functionality remains reliable in future updates.&lt;br /&gt;
&lt;br /&gt;
[[File:V what rast test file.png|500px]]&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame to locate closest points.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
&lt;br /&gt;
result = gs.parse_command(&lt;br /&gt;
    &amp;quot;r.distance&amp;quot;, map=[&amp;quot;zipcodes&amp;quot;, &amp;quot;lakes&amp;quot;], flags=&amp;quot;l&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
df = pd.json_normalize(result)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output (first 10 rows, truncated) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
       distance  from_cell.category  from_cell.easting  ...  to_cell.easting to_cell.northing  to_cell.label&lt;br /&gt;
0  11158.507466               27511      632604.951740  ...    640584.676990    215499.220687       Dam/Weir&lt;br /&gt;
1   1037.271198               27511      631734.981693  ...    632314.961724    221839.026534      Lake/Pond&lt;br /&gt;
2   2276.988836               27511      630015.040913  ...    630765.015090    219459.099418      Reservoir&lt;br /&gt;
3  14614.155031               27513      631055.005106  ...    640584.676990    215499.220687       Dam/Weir&lt;br /&gt;
4   3635.876453               27513      631674.983759  ...    635164.863600    227198.862392      Lake/Pond&lt;br /&gt;
5   6971.335517               27513      630005.041257  ...    630765.015090    219459.099418      Reservoir&lt;br /&gt;
6   8978.927486               27518      632134.967922  ...    640424.682499    215209.229568       Dam/Weir&lt;br /&gt;
7      0.000000               27518      630005.041257  ...    630005.041257    220199.076757      Lake/Pond&lt;br /&gt;
8    699.975899               27518      630005.041257  ...    630705.017156    219379.101868      Reservoir&lt;br /&gt;
9    509.197766               27529      641154.657366  ...    640674.673892    215249.228343       Dam/Weir&lt;br /&gt;
&lt;br /&gt;
[10 rows x 9 columns]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.distance&amp;quot;,&lt;br /&gt;
    flags=&amp;quot;p&amp;quot;,&lt;br /&gt;
    from_=&amp;quot;busroute_a&amp;quot;,&lt;br /&gt;
    to=&amp;quot;busstopsall&amp;quot;,&lt;br /&gt;
    upload=&amp;quot;dist,to_attr&amp;quot;,&lt;br /&gt;
    to_column=&amp;quot;routes&amp;quot;,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
   from_cat  to_cat      dist to_attr&lt;br /&gt;
0         1     112  0.142812     8,A&lt;br /&gt;
1         2      44  0.102327     9,A&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;r.volume&amp;quot;, input=&amp;quot;elevation&amp;quot;, clump=&amp;quot;geology_30m&amp;quot;, flags=&amp;quot;p&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    category  average         sum   cells        volume  easting  northing&lt;br /&gt;
0        217   118.93 86288827.99  725562 8628882798.63   635325    221535&lt;br /&gt;
1        262   108.97 21650560.37  198684 2165056037.02   638935    222495&lt;br /&gt;
2        270    92.23 63578874.44  689373 6357887443.53   642405    221485&lt;br /&gt;
3        405   132.96 33732662.09  253710 3373266208.59   631835    224095&lt;br /&gt;
4        583   139.35  3011288.22   21609  301128821.55   630205    224665&lt;br /&gt;
5        720   124.30   599618.16    4824   59961816.06   634075    227995&lt;br /&gt;
6        766   132.43   936791.20    7074   93679120.08   631425    227845&lt;br /&gt;
7        862   118.31  7302317.47   61722  730231746.74   630505    218885&lt;br /&gt;
8        910    94.20  4235816.13   44964  423581613.11   639215    216365&lt;br /&gt;
9        921   135.22  1693985.23   12528  169398523.05   630755    215445&lt;br /&gt;
10       945   127.24     1145.12       9     114512.03   630015    215015&lt;br /&gt;
11       946    89.91   365748.34    4068   36574833.85   639085    215255&lt;br /&gt;
12       948   129.02   112631.82     873   11263181.57   630185    215115&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{GSoC}}&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=File:V_what_rast_test_file.png&amp;diff=28677</id>
		<title>File:V what rast test file.png</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=File:V_what_rast_test_file.png&amp;diff=28677"/>
		<updated>2025-08-24T07:49:40Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;v what rast test file&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28676</id>
		<title>GRASS GSoC 2025 Add JSON output to different tools in C</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28676"/>
		<updated>2025-08-24T07:47:23Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: /* Test Suite Update */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Nishant Bansal&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo - Open Source Geospatial Foundation]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/NishantBansal2003/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''GSoC proposal''' || [https://docs.google.com/document/d/1ZPQ9RXU7b_RUDmBmAMeK7ZjFAV1WC7Urd1Zlz678jyw/edit?tab=t.0#heading=h.z6ne0og04bp5 View Proposal]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Abstract =&lt;br /&gt;
Currently, most GRASS tools produce data in plain text by default. This means that users who want to process the output in Python need to create custom parsing code. To make this easier, several modules could be improved by oﬀering JSON as an alternative output format. Recently, the Parson library was added to the GRASS codebase to support JSON output in addition to plain text. Building on the advancements made during the last GSoC, my project aims to expand JSON output capabilities to more tools using the Parson library. I will also work on making the JSON structure introduced in the previous GSoC more useful and consistent. Additionally, I plan to add support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
&lt;br /&gt;
# Working with mentors to finalize the structure of the JSON output.&lt;br /&gt;
# Adding an option to choose the output format (plain text or JSON) for each updated tool.&lt;br /&gt;
# Make the JSON structure introduced during the last GSoC more useful and consistent across tools.&lt;br /&gt;
# Developing Python test cases to ensure that the JSON output works correctly and to avoid future issues.&lt;br /&gt;
# Providing basic documentation and example JSON outputs for each modified tool.&lt;br /&gt;
# Adding support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
# Develop simple examples demonstrating how to use JSON output in a data science workflow, such as reading JSON data into pandas or python.&lt;br /&gt;
&lt;br /&gt;
= Timeline =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Period !! Timeline  !! Tasks   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period &lt;br /&gt;
||&lt;br /&gt;
May 8 - June 1  &lt;br /&gt;
|| &lt;br /&gt;
# Reviewed the work done during the last GSoC to stabilize the JSON output.&lt;br /&gt;
# Discussed the priority tools for adding JSON support.&lt;br /&gt;
# Read GRASS documentation to add Python and JSON examples to the documentation.&lt;br /&gt;
|| &lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;13&amp;quot; | Official Coding Period &lt;br /&gt;
|-&lt;br /&gt;
| '''Week 1''' (June 2 - June 8) || &lt;br /&gt;
# Add JSON support for g.mapset [https://github.com/OSGeo/grass/pull/5810 #5810]&lt;br /&gt;
# Fix uninitialized zone_value in r.univar [https://github.com/OSGeo/grass/pull/5821 #5821]&lt;br /&gt;
# Add JSON support for r.what.color [https://github.com/OSGeo/grass/pull/5822 #5822]&lt;br /&gt;
# Update test file in r.info [https://github.com/OSGeo/grass/pull/5842 #5842]&lt;br /&gt;
# Improve interface for r.info [https://github.com/OSGeo/grass/pull/5859 #5859]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 2''' (June 9 - June 15) ||&lt;br /&gt;
# Add JSON support for g.version [https://github.com/OSGeo/grass/pull/5863 #5863]&lt;br /&gt;
# Add JSON support for i.group [https://github.com/OSGeo/grass/pull/5870 #5870]&lt;br /&gt;
# Add test file in r.stats [https://github.com/OSGeo/grass/pull/5879 #5879]&lt;br /&gt;
# Add tests for JSON output in r.stats [https://github.com/OSGeo/grass/pull/5892 #5892]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 3''' (June 16 - June 22) ||&lt;br /&gt;
# Update the JSON output schema of v.distance [https://github.com/OSGeo/grass/pull/5898 #5898]&lt;br /&gt;
# Fix uninitialized window variable in r.stats [https://github.com/OSGeo/grass/pull/5900 #5900]&lt;br /&gt;
# Add test file in g.list [https://github.com/OSGeo/grass/pull/5906 #5906]&lt;br /&gt;
# Add JSON support for g.list [https://github.com/OSGeo/grass/pull/5921 #5921]&lt;br /&gt;
# Update the JSON output schema of g.region [https://github.com/OSGeo/grass/pull/5929 #5929]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 4''' (June 23 - June 29) ||&lt;br /&gt;
# Update the JSON output schema of v.to.db [https://github.com/OSGeo/grass/pull/5946 #5946]&lt;br /&gt;
# Update the JSON output schema of r.profile [https://github.com/OSGeo/grass/pull/5962 #5962]&lt;br /&gt;
# Add SHELL and CSV output support for r.univar [https://github.com/OSGeo/grass/pull/5966 #5966]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 5''' (June 30 - July 6) ||&lt;br /&gt;
# Add test file in r.regression.line [https://github.com/OSGeo/grass/pull/5990 #5990]&lt;br /&gt;
# Add JSON support for r.regression.line [https://github.com/OSGeo/grass/pull/5993 #5993]&lt;br /&gt;
# Add test file in r.stats.quantile [https://github.com/OSGeo/grass/pull/6002 #6002]&lt;br /&gt;
# Add JSON support for r.stats.quantile [https://github.com/OSGeo/grass/pull/6007 #6007]&lt;br /&gt;
# Add test file in r.volume [https://github.com/OSGeo/grass/pull/6027 #6027]&lt;br /&gt;
# Add JSON support for r.volume [https://github.com/OSGeo/grass/pull/6036 #6036]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 6''' (July 7 - July 13) ||&lt;br /&gt;
# Add JSON support for db.columns [https://github.com/OSGeo/grass/pull/6042 #6042]&lt;br /&gt;
# Add test file in m.measure [https://github.com/OSGeo/grass/pull/6051 #6051]&lt;br /&gt;
# Add test file in db.connect [https://github.com/OSGeo/grass/pull/6052 #6052]&lt;br /&gt;
# Add JSON support for m.measure [https://github.com/OSGeo/grass/pull/6053 #6053]&lt;br /&gt;
# Add JSON support for db.connect [https://github.com/OSGeo/grass/pull/6059 #6059]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | '''Week 7''' (July 14 - July 20) ||&lt;br /&gt;
# Add test file in r.regression.multi [https://github.com/OSGeo/grass/pull/6066 #6066]&lt;br /&gt;
# Add test file in v.db.connect [https://github.com/OSGeo/grass/pull/6067 #6067]&lt;br /&gt;
# Add JSON support for r.regression.multi [https://github.com/OSGeo/grass/pull/6075 #6075]&lt;br /&gt;
# Add JSON support for v.db.connect [https://github.com/OSGeo/grass/pull/6077 #6077]&lt;br /&gt;
# Submit MidTerm evaluation.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 8''' (July 21 - July 27) ||&lt;br /&gt;
# Add JSON support for g.findfile [https://github.com/OSGeo/grass/pull/6091 #6091]&lt;br /&gt;
# Add test file in r3.info [https://github.com/OSGeo/grass/pull/6098 #6098]&lt;br /&gt;
# Add JSON support for r3.info [https://github.com/OSGeo/grass/pull/6103 #6103]&lt;br /&gt;
# Add test file in v.what.rast [https://github.com/OSGeo/grass/pull/6109 #6109]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 9''' (July 28 - August 3) ||&lt;br /&gt;
# Update format to CSV instead of shell in v.category [https://github.com/OSGeo/grass/pull/6132 #6132]&lt;br /&gt;
# Add CSV output support to r.stats [https://github.com/OSGeo/grass/pull/6133 #6133]&lt;br /&gt;
# Add CSV headers to r.volume [https://github.com/OSGeo/grass/pull/6134 #6134]&lt;br /&gt;
# Add JSON support for v.what.rast [https://github.com/OSGeo/grass/pull/6140 #6140]&lt;br /&gt;
# Add CSV output support to r.profile [https://github.com/OSGeo/grass/pull/6145 #6145]&lt;br /&gt;
# Update test cases in r.distance [https://github.com/OSGeo/grass/pull/6150 #6150]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 10''' (August 4 - August 10) ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 11''' (August 11 - August 17) ||&lt;br /&gt;
# Add JSON and CSV support for r.distance [https://github.com/OSGeo/grass/pull/6204 #6204]&lt;br /&gt;
# Add more test cases in v.class [https://github.com/OSGeo/grass/pull/6205 #6205]&lt;br /&gt;
# Add JSON and CSV support for v.class [https://github.com/OSGeo/grass/pull/6210 #6210]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 12''' (August 18 - August 24) ||&lt;br /&gt;
# Update JSON output format for v.what [https://github.com/OSGeo/grass/pull/6252 #6252]&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Evaluation Period &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | August 25 - September 1 ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
# Submit code, final evaluation and write the final GSoC report.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Reports =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* Introduced myself on the [https://discourse.osgeo.org/t/gsoc-2025-introduction-nishant-bansal/147005 OSGeo Discourse mailing list].&lt;br /&gt;
* Created both my [https://wiki.osgeo.org/wiki/User:Nishantbansal2003 personal Wiki page] and the [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C project Wiki page], adding all necessary project-related information.&lt;br /&gt;
* Read GRASS documentation to support the addition of Python and JSON examples.&lt;br /&gt;
* Worked on the following pull requests:&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5688 #5688]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5773 #5773]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5775 #5775]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5784 #5784]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5785 #5785]&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to the g.mapset and r.what.color modules.&lt;br /&gt;
* If time permits, I will begin improving the r.info interface: [https://github.com/OSGeo/grass/issues/5793 Issue #5793]&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
'''Project Discussions and Meetings'''&lt;br /&gt;
* '''14 May 2025''': Introductory meeting discussing JSON support and overall project milestones.&lt;br /&gt;
* '''21 May 2025''': Introduction with fellow developers. Discussed priority tools, adding Python/Pandas examples, and approaches for finalizing the JSON schema for each module.&lt;br /&gt;
&lt;br /&gt;
== Week-1 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.mapset''': Added JSON output support, now you can use -p and -l flags to get JSON-formatted results.&lt;br /&gt;
* '''r.univar''': Fixed a bug causing an uninitialized zone_value.&lt;br /&gt;
* '''r.what.color''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5822 #5822])&lt;br /&gt;
* '''r.info (regression tests)''': To maintain backward compatibility while updating its interface, I added strong regression tests.&lt;br /&gt;
* '''r.info (interface improvements)''': Began improving the module’s interface. (See PR [https://github.com/OSGeo/grass/pull/5859 #5859])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.version (see issue [https://github.com/OSGeo/grass/issues/5816 #5816]).&lt;br /&gt;
* Add JSON output support to i.group (see issue [https://github.com/OSGeo/grass/issues/5815 #5815]).&lt;br /&gt;
* If time permits, write tests for r.stats (see issue [https://github.com/OSGeo/grass/issues/5814 #5814]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-2 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.version''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5863 #5863])&lt;br /&gt;
* '''i.group''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5870 #5870])&lt;br /&gt;
* '''r.stats (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats''': Added tests for JSON output; this uncovered a bug, which was fixed alongside.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.distance (see issue [https://github.com/OSGeo/grass/issues/5846 #5846]).&lt;br /&gt;
* Add JSON output support to g.list (see issue [https://github.com/OSGeo/grass/issues/5848 #5848]).&lt;br /&gt;
* If time permits, fix the JSON output format of g.region (see issue [https://github.com/OSGeo/grass/issues/5828 #5828]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-3 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.distance''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5898 #5898])&lt;br /&gt;
* '''r.stats''': Fixed a bug causing an uninitialized &amp;lt;code&amp;gt;window&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
* '''g.list (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''g.list''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5921 #5921])&lt;br /&gt;
* '''g.region''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5929 #5929])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.to.db (see issue [https://github.com/OSGeo/grass/pull/5711 #5711]).&lt;br /&gt;
* Update JSON output format and documentation of r.profile (see issue [https://github.com/OSGeo/grass/pull/5834 #5834]).&lt;br /&gt;
* If time permits, add shell and csv output formats to r.univar (see issue [https://github.com/OSGeo/grass/pull/5824 #5824]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-4 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.to.db''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5946 #5946])&lt;br /&gt;
* '''r.profile''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5962 #5962])&lt;br /&gt;
* '''r.univar''': Implemented SHELL and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/5966 #5966])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.regression.line (see issue [https://github.com/OSGeo/grass/pull/5950 #5950]).&lt;br /&gt;
* Add JSON output support to r.stats.quantile (see issue [https://github.com/OSGeo/grass/pull/5951 #5951]).&lt;br /&gt;
* Add JSON output support to r.volume (see issue [https://github.com/OSGeo/grass/pull/5949 #5949]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-5 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.line (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.line''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5993 #5993])&lt;br /&gt;
* '''r.stats.quantile (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats.quantile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6007 #6007])&lt;br /&gt;
* '''r.volume (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.volume''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6036 #6036])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to m.measure (see issue [https://github.com/OSGeo/grass/pull/6006 #6006]).&lt;br /&gt;
* Add JSON output support to db.columns (see issue [https://github.com/OSGeo/grass/pull/6008 #6008]).&lt;br /&gt;
* Add JSON output support to db.connect (see issue [https://github.com/OSGeo/grass/pull/6009 #6009]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-6 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''db.columns''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6042 #6042])&lt;br /&gt;
* '''m.measure (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''m.measure''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6053 #6053])&lt;br /&gt;
* '''db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6059 #6059])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to v.db.connect (see issue [https://github.com/OSGeo/grass/pull/6014 #6014]).&lt;br /&gt;
* Add JSON output support to r.regression.multi (see issue [https://github.com/OSGeo/grass/pull/6010 #6010]).&lt;br /&gt;
* If time permits, add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* If time permits, add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-7 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.multi (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''v.db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.multi''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6075 #6075])&lt;br /&gt;
* '''v.db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6077 #6077])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* Add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
* If time permits, add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-8 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.findfile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6091 #6091])&lt;br /&gt;
* '''r3.info (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a flag-handling bug.&lt;br /&gt;
* '''r3.info''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6103 #6103])&lt;br /&gt;
* '''v.what.rast (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a sorting bug.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
* Update format to CSV instead of shell in v.category (see issue [https://github.com/OSGeo/grass/pull/6025 #6025]).&lt;br /&gt;
* Add CSV output support to r.stats (see issue [https://github.com/OSGeo/grass/issues/5835 #5835]).&lt;br /&gt;
* If time permits, add CSV output support to r.profile (see issue [https://github.com/OSGeo/grass/issues/5958 #5958]).&lt;br /&gt;
* If time permits, add CSV headers to r.volume (see issue [https://github.com/OSGeo/grass/issues/6049 #6049]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I don’t have any blockers this week. However, I’ll be a little busy with some personal work from August 3 to August 10, so I’ll try to complete next week’s tasks this week itself.&lt;br /&gt;
&lt;br /&gt;
== Week-9 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.category''': Updated format to CSV instead of shell. (See PR [https://github.com/OSGeo/grass/pull/6132 #6132])&lt;br /&gt;
* '''r.stats''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6133 #6133])&lt;br /&gt;
* '''r.volume''': Implemented CSV column headers support. (See PR [https://github.com/OSGeo/grass/pull/6134 #6134])&lt;br /&gt;
* '''v.what.rast''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6140 #6140])&lt;br /&gt;
* '''r.profile''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6145 #6145])&lt;br /&gt;
* '''r.distance (regression tests)''': Updated regression tests to ensure backward compatibility with new JSON support. (See PR [https://github.com/OSGeo/grass/pull/6150 #6150])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* I’ll be a bit busy with some personal work from August 3 to 10, so I completed next week’s tasks last week itself. I’ve already informed my mentors about my limited availability.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* Yes, I’ll be a bit busy with some personal work from August 3 to 10.&lt;br /&gt;
&lt;br /&gt;
== Week-10 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* This week I was busy with some personal work, so I did not complete any additional tasks. However, I had already finished this week’s tasks last week. This week, I mostly focused on handling reviews for those PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.distance (see issue [https://github.com/OSGeo/grass/issues/6135 #6135]).&lt;br /&gt;
* Add JSON output support to v.class (see issue [https://github.com/OSGeo/grass/issues/6136 #6136]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-11 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.distance''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6204 #6204])&lt;br /&gt;
* '''v.class''': Updated regression tests to ensure backward compatibility with new JSON support and fixed a out-of-bounds bug. (See PR [https://github.com/OSGeo/grass/pull/6205 #6205])&lt;br /&gt;
* '''v.class''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6210 #6210])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Discuss next week’s tasks with my mentors, if no issues are assigned, I’ll identify tools that currently lack JSON support and evaluate which ones are feasible to add it to.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-12 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.what''': Update JSON output format. (See PR [https://github.com/OSGeo/grass/pull/6252 #6252])&lt;br /&gt;
* Addressed review comments on my open PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
= Final Report =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Title''' || Add JSON output to different tools in C for GRASS&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo (Open Source Geospatial Foundation)]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''Program''' || Google Summer of Code 2025&lt;br /&gt;
|-&lt;br /&gt;
| '''Contributions''' || [https://github.com/OSGeo/grass/pulls?q=is%3Apr+author%3ANishantBansal2003+ Pull Requests]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
During my GSoC project, I addressed the challenge that most GRASS tools produced only plain text output, forcing users to write custom parsing code for Python-based workflows. The task was to make these tools more data-science friendly by adding structured output formats. To achieve this, I extended the use of the Parson library to implement consistent JSON output across multiple modules, refined the JSON structure introduced in the previous GSoC, and added optional support for SHELL and CSV outputs where appropriate. I developed comprehensive Python test cases, ensured backward compatibility, and provided documentation with practical examples such as loading JSON into pandas. As a result, GRASS users can now directly consume structured outputs in modern workflows, reducing parsing overhead, improving interoperability, and paving the way for broader adoption of GRASS in data science contexts.&lt;br /&gt;
&lt;br /&gt;
== The state of integration BEFORE the start of GSoC ==&lt;br /&gt;
Before the start of GSoC, the integration of GRASS with data science workflows was limited due to several challenges. The JSON outputs introduced in the previous GSoC contained deeply nested hierarchies, making them difficult to use directly with libraries such as '''pandas''' or in broader data science pipelines. While some tools already supported JSON (e.g., &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;), many important and highly demanded modules lacked JSON support, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt; and many more. This lack of consistency limited the seamless adoption of GRASS in analytics and machine learning contexts. Moreover, there was no clear '''documentation of the JSON schema''' or guidance on how to parse and utilize these outputs effectively in '''python or pandas''', which made it difficult for users to understand the use cases and integrate GRASS outputs into modern data science workflows.&lt;br /&gt;
&lt;br /&gt;
== The state of integration AFTER GSoC ==&lt;br /&gt;
&lt;br /&gt;
After GSoC, the integration state of JSON and alternative output formats in GRASS has significantly improved. I refactored the JSON structures for tools such as &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;, and others, removing unnecessary nesting introduced during the previous GSoC. This makes their outputs much easier to consume directly in &amp;lt;b&amp;gt;Python&amp;lt;/b&amp;gt; or with &amp;lt;b&amp;gt;pandas&amp;lt;/b&amp;gt;. In addition, JSON support has been extended to many essential and frequently used modules, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;, and many more. I also added detailed documentation of the JSON schema and provided examples showing how to parse and use these outputs effectively with Python and pandas. Together, these improvements make the adoption of GRASS in modern &amp;lt;b&amp;gt;data science workflows&amp;lt;/b&amp;gt; far more seamless and accessible.&lt;br /&gt;
&lt;br /&gt;
=== Enhancements made per tool ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;: Simplified JSON structure for univariate statistics, removed unnecessary hierarchy, and added new output format options (CSV, shell).&lt;br /&gt;
* &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;: Added JSON support for querying raster map colors, with a Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;: Added JSON support for reporting the current mapset, with a Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;: Updated JSON structure for raster map metadata, removing hierarchy for easier parsing. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;: Simplified JSON output for geographic region boundaries, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;: Added JSON support for GRASS version information, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;: Added JSON support for listing imagery groups, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;: Added JSON and CSV support for raster area statistics, with Python and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;: Refined JSON schema for nearest element queries, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;: Added JSON support for listing GRASS database files, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;: Updated JSON schema for printing vector attribute values, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;: Simplified JSON output, added CSV support, and included a matplotlib example for profile visualization.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;: Updated JSON schema for linear regression between rasters, with Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;: Updated JSON schema for category quantiles, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;: Added JSON support for raster volume calculations, fixed missing headers in CSV output, and provided pandas examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.columns&amp;lt;/code&amp;gt;: Added JSON output for listing database table columns, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;: Added JSON output for measuring lengths and areas, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.connect&amp;lt;/code&amp;gt;: Added JSON output for DB connection info, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.multi&amp;lt;/code&amp;gt;: Added JSON output for multiple regression between rasters, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.db.connect&amp;lt;/code&amp;gt;: Added JSON output for vector map attribute connections, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.findfile&amp;lt;/code&amp;gt;: Added JSON output for GRASS database file search, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;: Added JSON output for 3D raster map info, with Python example. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;: Added JSON output for extracting raster values at vector points, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt;: Added JSON and CSV support for locating closest points between raster objects, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;: Added JSON and CSV support for attribute data, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;: Migrated from manually written JSON to Parson-based JSON output, simplified schema, and provided Python parsing examples.&lt;br /&gt;
&lt;br /&gt;
All these changes were accompanied by regression tests to ensure that new JSON/CSV/SHELL/PLAIN output options do not break existing functionality. Additionally, I introduced comprehensive Python test cases for these outputs, making the enhancements reliable and future-proof. During this work, I also fixed several bugs in modules such as &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;, strengthening the stability of GRASS as a whole.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
To sum up, I’m glad to have met the three core objectives of my project with the constant support of my mentors:&lt;br /&gt;
&lt;br /&gt;
* Brought JSON output to several important and long-requested modules, added regression tests, and ensured reliable future test coverage.&lt;br /&gt;
* Enhanced the JSON schema introduced in last year’s GSoC by reducing unnecessary hierarchy, making it more consistent across tools, and providing Python/Pandas examples for practical use.&lt;br /&gt;
* Expanded &amp;lt;b&amp;gt;CSV&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;SHELL&amp;lt;/b&amp;gt; output formats to additional tools where they could bring value.&lt;br /&gt;
&lt;br /&gt;
This journey has been both rewarding and educational, and I’m grateful for the opportunity to contribute to GRASS through GSoC 2025. I especially want to thank &amp;lt;b&amp;gt;Anna Petrasova&amp;lt;/b&amp;gt; and the GRASS Development Team for their guidance and support. I’m excited to keep building on this work and further extend JSON and other features in the future.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
There is significant scope to extend structured output support across GRASS tools. In particular, future efforts should focus on:&lt;br /&gt;
* Expanding JSON output to additional modules, with details tracked here: [https://github.com/orgs/OSGeo/projects/10 GRASS JSON Outputs Project].&lt;br /&gt;
* Refining and standardizing the JSON schema to better support complex workflows and integrations.&lt;br /&gt;
* Exploring and implementing other output formats (e.g., SHELL, CSV, PLAIN) where they can improve usability and automation.&lt;br /&gt;
I also plan to continue contributing to GRASS by extending JSON support to more modules and engaging in community discussions around schema design and format integration.&lt;br /&gt;
&lt;br /&gt;
== Log of Pull Requests ==&lt;br /&gt;
Below is a list of pull requests submitted to the GRASS repository during GSoC 2025:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pull Request !! Description  !! Date   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5688 #5688] || r.univar: Fix JSON structure || May 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5773 #5773] || r.what.color: Add test file || May 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5775 #5775] || g.mapset: Add test file || May 26, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5784 #5784] || r.info: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;Closed&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5785 #5785] || g.region: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5810 #5810] || g.mapset: Add JSON support || June 2, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5821 #5821] || r.univar: Fix uninitialized zone_value || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5822 #5822] || r.what.color: Add JSON support || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5842 #5842] || r.info: Update test file || June 5, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5859 #5859] || r.info: Improve interface || June 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5863 #5863] || g.version: Add JSON support || June 9, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5870 #5870] || i.group: Add JSON support || June 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5879 #5879] || r.stats: Add test file || June 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5892 #5892] || r.stats: Add tests for JSON output || June 14, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5898 #5898] || v.distance: Update JSON format || June 16, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5900 #5900] || r.stats: fix uninitialised window value || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5906 #5906] || g.list: Add test file || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5921 #5921] || g.list: Add JSON support || June 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5929 #5929] || g.region: Update JSON format || June 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5946 #5946] || v.to.db: Update JSON format || June 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5962 #5962] || r.profile: Update JSON format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5966 #5966] || r.univar: Add shell and CSV format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5990 #5990] || r.regression.line: Add test file || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5993 #5993] || r.regression.line: Add JSON support || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6002 #6002] || r.stats.quantile: Add test file || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6007 #6007] || r.stats.quantile: Add JSON support || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6027 #6027] || r.volume: Add test file || July 4, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6036 #6036] || r.volume: Add JSON support || July 6, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6042 #6042] || db.columns: Add JSON support || July 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6051 #6051] || m.measure: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6052 #6052] || db.connect: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6053 #6053] || m.measure: Add JSON support || July 11, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6059 #6059] || db.connect: Add JSON support || July 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6066 #6066] || r.regression.multi: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6067 #6067] || v.db.connect: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6075 #6075] || r.regression.multi: Add JSON support || July 18, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6077 #6077] || v.db.connect: Add JSON support || July 19, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6091 #6091] || g.findfile: Add JSON support || July 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6098 #6098] || r3.info: Add test file || July 22, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6103 #6103] || r3.info: Add JSON support || July 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6109 #6109] || v.what.rast: Add test file || July 24, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6132 #6132] || v.category: Use CSV format instead of shell format || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6133 #6133] || r.stats: add CSV support || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6134 #6134] || r.volume: add csv column headers || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6140 #6140] || v.what.rast: Add JSON support || July 29, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6145 #6145] || r.profile: Add CSV support || July 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6150 #6150] || r.distance: Update existing test cases || August 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6204 #6204] || r.distance: Add JSON and CSV support || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6205 #6205] || v.class: Add more test cases and fix out-of-bounds bug || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6210 #6210] || v.class: Add JSON and CSV support || August 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6252 #6252] || v.what: Update JSON output format || August 23, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Additional Links ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Ttile&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| OSGeo Wiki Page&lt;br /&gt;
| [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C Add JSON output to different tools in C for GRASS]&lt;br /&gt;
|-&lt;br /&gt;
| Github Fork&lt;br /&gt;
| [https://github.com/NishantBansal2003/grass GitHub Fork]&lt;br /&gt;
|-&lt;br /&gt;
| GSoC Page&lt;br /&gt;
| [https://summerofcode.withgoogle.com/programs/2025/projects/GPVGd3DH Link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples &amp;amp; Images ==&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; JSON output in Python ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; can be directly loaded into a pandas DataFrame and used for plotting with matplotlib.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
# Run r.profile command&lt;br /&gt;
elevation = gs.read_command(&lt;br /&gt;
    &amp;quot;r.profile&amp;quot;,&lt;br /&gt;
    input=&amp;quot;elevation&amp;quot;,&lt;br /&gt;
    coordinates=&amp;quot;641712,226095,641546,224138,641546,222048,641049,221186&amp;quot;,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
    flags=&amp;quot;gc&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Load the JSON data into a dataframe&lt;br /&gt;
df = pd.read_json(elevation)&lt;br /&gt;
print(df)&lt;br /&gt;
&lt;br /&gt;
# Create the scatter plot&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
plt.scatter(df[&amp;quot;distance&amp;quot;], df[&amp;quot;value&amp;quot;], c=df[&amp;quot;color&amp;quot;], marker=&amp;quot;o&amp;quot;)&lt;br /&gt;
plt.title(&amp;quot;Profile of Distance vs. Elevation with Color Coding&amp;quot;)&lt;br /&gt;
plt.xlabel(&amp;quot;Distance (meters)&amp;quot;)&lt;br /&gt;
plt.ylabel(&amp;quot;Elevation&amp;quot;)&lt;br /&gt;
plt.grid(True)&lt;br /&gt;
plt.show()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame Output (first 10 rows) ====  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
         easting       northing   distance      value    color&lt;br /&gt;
0  641712.000000  226095.000000   0.000000  84.661507  #71FF00&lt;br /&gt;
1  641711.154826  226085.036106   9.999675  84.511765  #6FFF00&lt;br /&gt;
2  641710.309651  226075.072213  19.999349  84.241806  #6BFF00&lt;br /&gt;
3  641709.464477  226065.108319  29.999024  84.304214  #6CFF00&lt;br /&gt;
4  641708.619302  226055.144426  39.998699  84.174400  #6AFF00&lt;br /&gt;
5  641707.774128  226045.180532  49.998374  84.112534  #6AFF00&lt;br /&gt;
6  641706.928954  226035.216639  59.998048  84.011208  #68FF00&lt;br /&gt;
7  641706.083779  226025.252745  69.997723  83.834084  #66FF00&lt;br /&gt;
8  641705.238605  226015.288851  79.997398  83.870193  #67FF00&lt;br /&gt;
9  641704.393430  226005.324958  89.997073  84.194908  #6BFF00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Visualization ====  &lt;br /&gt;
&lt;br /&gt;
Matplotlib scatter plot generated from the &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; JSON output: &lt;br /&gt;
&lt;br /&gt;
[[File:R profile plot.png]]&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt; can be directly loaded into a pandas DataFrame.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.class&amp;quot;,&lt;br /&gt;
    map=&amp;quot;bridges&amp;quot;,&lt;br /&gt;
    column=&amp;quot;YEAR_BUILT&amp;quot;,&lt;br /&gt;
    algorithm=&amp;quot;std&amp;quot;,&lt;br /&gt;
    nbclasses=5,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data[&amp;quot;intervals&amp;quot;])&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output (intervals) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
          from           to  frequency&lt;br /&gt;
0  1891.000000  1938.829689        750&lt;br /&gt;
1  1938.829689  1954.722836       1841&lt;br /&gt;
2  1954.722836  1970.615983       5556&lt;br /&gt;
3  1970.615983  1986.509130       1788&lt;br /&gt;
4  1986.509130  1997.000000       1003&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame to display categories and values.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.what.rast&amp;quot;, map=&amp;quot;bridges&amp;quot;, raster=&amp;quot;elevation&amp;quot;, flags=&amp;quot;p&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    category       value&lt;br /&gt;
0       4635   86.851212&lt;br /&gt;
1       4648   87.883255&lt;br /&gt;
2       4688  103.382004&lt;br /&gt;
3       4709   67.387856&lt;br /&gt;
4       4986   90.972832&lt;br /&gt;
5       4991   86.550629&lt;br /&gt;
6       5027   84.256355&lt;br /&gt;
7       5060   79.500443&lt;br /&gt;
8       5071   78.732864&lt;br /&gt;
9       5089   85.703636&lt;br /&gt;
10      5096  115.967323&lt;br /&gt;
11      5130   81.055870&lt;br /&gt;
12      5150   92.812927&lt;br /&gt;
13      5166   88.149483&lt;br /&gt;
14      5184   76.426331&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test Suite Update ====&lt;br /&gt;
Added 6 tests to the test suite, including both regression tests and future-proof tests to ensure functionality remains reliable in future updates.&lt;br /&gt;
&lt;br /&gt;
[[File:Test file.png|500px]]&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame to locate closest points.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
&lt;br /&gt;
result = gs.parse_command(&lt;br /&gt;
    &amp;quot;r.distance&amp;quot;, map=[&amp;quot;zipcodes&amp;quot;, &amp;quot;lakes&amp;quot;], flags=&amp;quot;l&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
df = pd.json_normalize(result)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output (first 10 rows, truncated) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
       distance  from_cell.category  from_cell.easting  ...  to_cell.easting to_cell.northing  to_cell.label&lt;br /&gt;
0  11158.507466               27511      632604.951740  ...    640584.676990    215499.220687       Dam/Weir&lt;br /&gt;
1   1037.271198               27511      631734.981693  ...    632314.961724    221839.026534      Lake/Pond&lt;br /&gt;
2   2276.988836               27511      630015.040913  ...    630765.015090    219459.099418      Reservoir&lt;br /&gt;
3  14614.155031               27513      631055.005106  ...    640584.676990    215499.220687       Dam/Weir&lt;br /&gt;
4   3635.876453               27513      631674.983759  ...    635164.863600    227198.862392      Lake/Pond&lt;br /&gt;
5   6971.335517               27513      630005.041257  ...    630765.015090    219459.099418      Reservoir&lt;br /&gt;
6   8978.927486               27518      632134.967922  ...    640424.682499    215209.229568       Dam/Weir&lt;br /&gt;
7      0.000000               27518      630005.041257  ...    630005.041257    220199.076757      Lake/Pond&lt;br /&gt;
8    699.975899               27518      630005.041257  ...    630705.017156    219379.101868      Reservoir&lt;br /&gt;
9    509.197766               27529      641154.657366  ...    640674.673892    215249.228343       Dam/Weir&lt;br /&gt;
&lt;br /&gt;
[10 rows x 9 columns]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.distance&amp;quot;,&lt;br /&gt;
    flags=&amp;quot;p&amp;quot;,&lt;br /&gt;
    from_=&amp;quot;busroute_a&amp;quot;,&lt;br /&gt;
    to=&amp;quot;busstopsall&amp;quot;,&lt;br /&gt;
    upload=&amp;quot;dist,to_attr&amp;quot;,&lt;br /&gt;
    to_column=&amp;quot;routes&amp;quot;,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
   from_cat  to_cat      dist to_attr&lt;br /&gt;
0         1     112  0.142812     8,A&lt;br /&gt;
1         2      44  0.102327     9,A&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;r.volume&amp;quot;, input=&amp;quot;elevation&amp;quot;, clump=&amp;quot;geology_30m&amp;quot;, flags=&amp;quot;p&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    category  average         sum   cells        volume  easting  northing&lt;br /&gt;
0        217   118.93 86288827.99  725562 8628882798.63   635325    221535&lt;br /&gt;
1        262   108.97 21650560.37  198684 2165056037.02   638935    222495&lt;br /&gt;
2        270    92.23 63578874.44  689373 6357887443.53   642405    221485&lt;br /&gt;
3        405   132.96 33732662.09  253710 3373266208.59   631835    224095&lt;br /&gt;
4        583   139.35  3011288.22   21609  301128821.55   630205    224665&lt;br /&gt;
5        720   124.30   599618.16    4824   59961816.06   634075    227995&lt;br /&gt;
6        766   132.43   936791.20    7074   93679120.08   631425    227845&lt;br /&gt;
7        862   118.31  7302317.47   61722  730231746.74   630505    218885&lt;br /&gt;
8        910    94.20  4235816.13   44964  423581613.11   639215    216365&lt;br /&gt;
9        921   135.22  1693985.23   12528  169398523.05   630755    215445&lt;br /&gt;
10       945   127.24     1145.12       9     114512.03   630015    215015&lt;br /&gt;
11       946    89.91   365748.34    4068   36574833.85   639085    215255&lt;br /&gt;
12       948   129.02   112631.82     873   11263181.57   630185    215115&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{GSoC}}&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28675</id>
		<title>GRASS GSoC 2025 Add JSON output to different tools in C</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28675"/>
		<updated>2025-08-24T07:44:56Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: /* Using v.what.rast JSON output with Pandas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Nishant Bansal&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo - Open Source Geospatial Foundation]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/NishantBansal2003/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''GSoC proposal''' || [https://docs.google.com/document/d/1ZPQ9RXU7b_RUDmBmAMeK7ZjFAV1WC7Urd1Zlz678jyw/edit?tab=t.0#heading=h.z6ne0og04bp5 View Proposal]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Abstract =&lt;br /&gt;
Currently, most GRASS tools produce data in plain text by default. This means that users who want to process the output in Python need to create custom parsing code. To make this easier, several modules could be improved by oﬀering JSON as an alternative output format. Recently, the Parson library was added to the GRASS codebase to support JSON output in addition to plain text. Building on the advancements made during the last GSoC, my project aims to expand JSON output capabilities to more tools using the Parson library. I will also work on making the JSON structure introduced in the previous GSoC more useful and consistent. Additionally, I plan to add support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
&lt;br /&gt;
# Working with mentors to finalize the structure of the JSON output.&lt;br /&gt;
# Adding an option to choose the output format (plain text or JSON) for each updated tool.&lt;br /&gt;
# Make the JSON structure introduced during the last GSoC more useful and consistent across tools.&lt;br /&gt;
# Developing Python test cases to ensure that the JSON output works correctly and to avoid future issues.&lt;br /&gt;
# Providing basic documentation and example JSON outputs for each modified tool.&lt;br /&gt;
# Adding support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
# Develop simple examples demonstrating how to use JSON output in a data science workflow, such as reading JSON data into pandas or python.&lt;br /&gt;
&lt;br /&gt;
= Timeline =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Period !! Timeline  !! Tasks   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period &lt;br /&gt;
||&lt;br /&gt;
May 8 - June 1  &lt;br /&gt;
|| &lt;br /&gt;
# Reviewed the work done during the last GSoC to stabilize the JSON output.&lt;br /&gt;
# Discussed the priority tools for adding JSON support.&lt;br /&gt;
# Read GRASS documentation to add Python and JSON examples to the documentation.&lt;br /&gt;
|| &lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;13&amp;quot; | Official Coding Period &lt;br /&gt;
|-&lt;br /&gt;
| '''Week 1''' (June 2 - June 8) || &lt;br /&gt;
# Add JSON support for g.mapset [https://github.com/OSGeo/grass/pull/5810 #5810]&lt;br /&gt;
# Fix uninitialized zone_value in r.univar [https://github.com/OSGeo/grass/pull/5821 #5821]&lt;br /&gt;
# Add JSON support for r.what.color [https://github.com/OSGeo/grass/pull/5822 #5822]&lt;br /&gt;
# Update test file in r.info [https://github.com/OSGeo/grass/pull/5842 #5842]&lt;br /&gt;
# Improve interface for r.info [https://github.com/OSGeo/grass/pull/5859 #5859]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 2''' (June 9 - June 15) ||&lt;br /&gt;
# Add JSON support for g.version [https://github.com/OSGeo/grass/pull/5863 #5863]&lt;br /&gt;
# Add JSON support for i.group [https://github.com/OSGeo/grass/pull/5870 #5870]&lt;br /&gt;
# Add test file in r.stats [https://github.com/OSGeo/grass/pull/5879 #5879]&lt;br /&gt;
# Add tests for JSON output in r.stats [https://github.com/OSGeo/grass/pull/5892 #5892]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 3''' (June 16 - June 22) ||&lt;br /&gt;
# Update the JSON output schema of v.distance [https://github.com/OSGeo/grass/pull/5898 #5898]&lt;br /&gt;
# Fix uninitialized window variable in r.stats [https://github.com/OSGeo/grass/pull/5900 #5900]&lt;br /&gt;
# Add test file in g.list [https://github.com/OSGeo/grass/pull/5906 #5906]&lt;br /&gt;
# Add JSON support for g.list [https://github.com/OSGeo/grass/pull/5921 #5921]&lt;br /&gt;
# Update the JSON output schema of g.region [https://github.com/OSGeo/grass/pull/5929 #5929]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 4''' (June 23 - June 29) ||&lt;br /&gt;
# Update the JSON output schema of v.to.db [https://github.com/OSGeo/grass/pull/5946 #5946]&lt;br /&gt;
# Update the JSON output schema of r.profile [https://github.com/OSGeo/grass/pull/5962 #5962]&lt;br /&gt;
# Add SHELL and CSV output support for r.univar [https://github.com/OSGeo/grass/pull/5966 #5966]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 5''' (June 30 - July 6) ||&lt;br /&gt;
# Add test file in r.regression.line [https://github.com/OSGeo/grass/pull/5990 #5990]&lt;br /&gt;
# Add JSON support for r.regression.line [https://github.com/OSGeo/grass/pull/5993 #5993]&lt;br /&gt;
# Add test file in r.stats.quantile [https://github.com/OSGeo/grass/pull/6002 #6002]&lt;br /&gt;
# Add JSON support for r.stats.quantile [https://github.com/OSGeo/grass/pull/6007 #6007]&lt;br /&gt;
# Add test file in r.volume [https://github.com/OSGeo/grass/pull/6027 #6027]&lt;br /&gt;
# Add JSON support for r.volume [https://github.com/OSGeo/grass/pull/6036 #6036]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 6''' (July 7 - July 13) ||&lt;br /&gt;
# Add JSON support for db.columns [https://github.com/OSGeo/grass/pull/6042 #6042]&lt;br /&gt;
# Add test file in m.measure [https://github.com/OSGeo/grass/pull/6051 #6051]&lt;br /&gt;
# Add test file in db.connect [https://github.com/OSGeo/grass/pull/6052 #6052]&lt;br /&gt;
# Add JSON support for m.measure [https://github.com/OSGeo/grass/pull/6053 #6053]&lt;br /&gt;
# Add JSON support for db.connect [https://github.com/OSGeo/grass/pull/6059 #6059]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | '''Week 7''' (July 14 - July 20) ||&lt;br /&gt;
# Add test file in r.regression.multi [https://github.com/OSGeo/grass/pull/6066 #6066]&lt;br /&gt;
# Add test file in v.db.connect [https://github.com/OSGeo/grass/pull/6067 #6067]&lt;br /&gt;
# Add JSON support for r.regression.multi [https://github.com/OSGeo/grass/pull/6075 #6075]&lt;br /&gt;
# Add JSON support for v.db.connect [https://github.com/OSGeo/grass/pull/6077 #6077]&lt;br /&gt;
# Submit MidTerm evaluation.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 8''' (July 21 - July 27) ||&lt;br /&gt;
# Add JSON support for g.findfile [https://github.com/OSGeo/grass/pull/6091 #6091]&lt;br /&gt;
# Add test file in r3.info [https://github.com/OSGeo/grass/pull/6098 #6098]&lt;br /&gt;
# Add JSON support for r3.info [https://github.com/OSGeo/grass/pull/6103 #6103]&lt;br /&gt;
# Add test file in v.what.rast [https://github.com/OSGeo/grass/pull/6109 #6109]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 9''' (July 28 - August 3) ||&lt;br /&gt;
# Update format to CSV instead of shell in v.category [https://github.com/OSGeo/grass/pull/6132 #6132]&lt;br /&gt;
# Add CSV output support to r.stats [https://github.com/OSGeo/grass/pull/6133 #6133]&lt;br /&gt;
# Add CSV headers to r.volume [https://github.com/OSGeo/grass/pull/6134 #6134]&lt;br /&gt;
# Add JSON support for v.what.rast [https://github.com/OSGeo/grass/pull/6140 #6140]&lt;br /&gt;
# Add CSV output support to r.profile [https://github.com/OSGeo/grass/pull/6145 #6145]&lt;br /&gt;
# Update test cases in r.distance [https://github.com/OSGeo/grass/pull/6150 #6150]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 10''' (August 4 - August 10) ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 11''' (August 11 - August 17) ||&lt;br /&gt;
# Add JSON and CSV support for r.distance [https://github.com/OSGeo/grass/pull/6204 #6204]&lt;br /&gt;
# Add more test cases in v.class [https://github.com/OSGeo/grass/pull/6205 #6205]&lt;br /&gt;
# Add JSON and CSV support for v.class [https://github.com/OSGeo/grass/pull/6210 #6210]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 12''' (August 18 - August 24) ||&lt;br /&gt;
# Update JSON output format for v.what [https://github.com/OSGeo/grass/pull/6252 #6252]&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Evaluation Period &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | August 25 - September 1 ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
# Submit code, final evaluation and write the final GSoC report.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Reports =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* Introduced myself on the [https://discourse.osgeo.org/t/gsoc-2025-introduction-nishant-bansal/147005 OSGeo Discourse mailing list].&lt;br /&gt;
* Created both my [https://wiki.osgeo.org/wiki/User:Nishantbansal2003 personal Wiki page] and the [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C project Wiki page], adding all necessary project-related information.&lt;br /&gt;
* Read GRASS documentation to support the addition of Python and JSON examples.&lt;br /&gt;
* Worked on the following pull requests:&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5688 #5688]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5773 #5773]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5775 #5775]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5784 #5784]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5785 #5785]&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to the g.mapset and r.what.color modules.&lt;br /&gt;
* If time permits, I will begin improving the r.info interface: [https://github.com/OSGeo/grass/issues/5793 Issue #5793]&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
'''Project Discussions and Meetings'''&lt;br /&gt;
* '''14 May 2025''': Introductory meeting discussing JSON support and overall project milestones.&lt;br /&gt;
* '''21 May 2025''': Introduction with fellow developers. Discussed priority tools, adding Python/Pandas examples, and approaches for finalizing the JSON schema for each module.&lt;br /&gt;
&lt;br /&gt;
== Week-1 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.mapset''': Added JSON output support, now you can use -p and -l flags to get JSON-formatted results.&lt;br /&gt;
* '''r.univar''': Fixed a bug causing an uninitialized zone_value.&lt;br /&gt;
* '''r.what.color''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5822 #5822])&lt;br /&gt;
* '''r.info (regression tests)''': To maintain backward compatibility while updating its interface, I added strong regression tests.&lt;br /&gt;
* '''r.info (interface improvements)''': Began improving the module’s interface. (See PR [https://github.com/OSGeo/grass/pull/5859 #5859])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.version (see issue [https://github.com/OSGeo/grass/issues/5816 #5816]).&lt;br /&gt;
* Add JSON output support to i.group (see issue [https://github.com/OSGeo/grass/issues/5815 #5815]).&lt;br /&gt;
* If time permits, write tests for r.stats (see issue [https://github.com/OSGeo/grass/issues/5814 #5814]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-2 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.version''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5863 #5863])&lt;br /&gt;
* '''i.group''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5870 #5870])&lt;br /&gt;
* '''r.stats (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats''': Added tests for JSON output; this uncovered a bug, which was fixed alongside.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.distance (see issue [https://github.com/OSGeo/grass/issues/5846 #5846]).&lt;br /&gt;
* Add JSON output support to g.list (see issue [https://github.com/OSGeo/grass/issues/5848 #5848]).&lt;br /&gt;
* If time permits, fix the JSON output format of g.region (see issue [https://github.com/OSGeo/grass/issues/5828 #5828]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-3 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.distance''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5898 #5898])&lt;br /&gt;
* '''r.stats''': Fixed a bug causing an uninitialized &amp;lt;code&amp;gt;window&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
* '''g.list (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''g.list''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5921 #5921])&lt;br /&gt;
* '''g.region''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5929 #5929])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.to.db (see issue [https://github.com/OSGeo/grass/pull/5711 #5711]).&lt;br /&gt;
* Update JSON output format and documentation of r.profile (see issue [https://github.com/OSGeo/grass/pull/5834 #5834]).&lt;br /&gt;
* If time permits, add shell and csv output formats to r.univar (see issue [https://github.com/OSGeo/grass/pull/5824 #5824]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-4 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.to.db''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5946 #5946])&lt;br /&gt;
* '''r.profile''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5962 #5962])&lt;br /&gt;
* '''r.univar''': Implemented SHELL and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/5966 #5966])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.regression.line (see issue [https://github.com/OSGeo/grass/pull/5950 #5950]).&lt;br /&gt;
* Add JSON output support to r.stats.quantile (see issue [https://github.com/OSGeo/grass/pull/5951 #5951]).&lt;br /&gt;
* Add JSON output support to r.volume (see issue [https://github.com/OSGeo/grass/pull/5949 #5949]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-5 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.line (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.line''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5993 #5993])&lt;br /&gt;
* '''r.stats.quantile (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats.quantile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6007 #6007])&lt;br /&gt;
* '''r.volume (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.volume''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6036 #6036])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to m.measure (see issue [https://github.com/OSGeo/grass/pull/6006 #6006]).&lt;br /&gt;
* Add JSON output support to db.columns (see issue [https://github.com/OSGeo/grass/pull/6008 #6008]).&lt;br /&gt;
* Add JSON output support to db.connect (see issue [https://github.com/OSGeo/grass/pull/6009 #6009]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-6 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''db.columns''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6042 #6042])&lt;br /&gt;
* '''m.measure (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''m.measure''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6053 #6053])&lt;br /&gt;
* '''db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6059 #6059])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to v.db.connect (see issue [https://github.com/OSGeo/grass/pull/6014 #6014]).&lt;br /&gt;
* Add JSON output support to r.regression.multi (see issue [https://github.com/OSGeo/grass/pull/6010 #6010]).&lt;br /&gt;
* If time permits, add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* If time permits, add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-7 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.multi (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''v.db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.multi''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6075 #6075])&lt;br /&gt;
* '''v.db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6077 #6077])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* Add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
* If time permits, add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-8 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.findfile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6091 #6091])&lt;br /&gt;
* '''r3.info (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a flag-handling bug.&lt;br /&gt;
* '''r3.info''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6103 #6103])&lt;br /&gt;
* '''v.what.rast (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a sorting bug.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
* Update format to CSV instead of shell in v.category (see issue [https://github.com/OSGeo/grass/pull/6025 #6025]).&lt;br /&gt;
* Add CSV output support to r.stats (see issue [https://github.com/OSGeo/grass/issues/5835 #5835]).&lt;br /&gt;
* If time permits, add CSV output support to r.profile (see issue [https://github.com/OSGeo/grass/issues/5958 #5958]).&lt;br /&gt;
* If time permits, add CSV headers to r.volume (see issue [https://github.com/OSGeo/grass/issues/6049 #6049]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I don’t have any blockers this week. However, I’ll be a little busy with some personal work from August 3 to August 10, so I’ll try to complete next week’s tasks this week itself.&lt;br /&gt;
&lt;br /&gt;
== Week-9 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.category''': Updated format to CSV instead of shell. (See PR [https://github.com/OSGeo/grass/pull/6132 #6132])&lt;br /&gt;
* '''r.stats''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6133 #6133])&lt;br /&gt;
* '''r.volume''': Implemented CSV column headers support. (See PR [https://github.com/OSGeo/grass/pull/6134 #6134])&lt;br /&gt;
* '''v.what.rast''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6140 #6140])&lt;br /&gt;
* '''r.profile''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6145 #6145])&lt;br /&gt;
* '''r.distance (regression tests)''': Updated regression tests to ensure backward compatibility with new JSON support. (See PR [https://github.com/OSGeo/grass/pull/6150 #6150])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* I’ll be a bit busy with some personal work from August 3 to 10, so I completed next week’s tasks last week itself. I’ve already informed my mentors about my limited availability.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* Yes, I’ll be a bit busy with some personal work from August 3 to 10.&lt;br /&gt;
&lt;br /&gt;
== Week-10 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* This week I was busy with some personal work, so I did not complete any additional tasks. However, I had already finished this week’s tasks last week. This week, I mostly focused on handling reviews for those PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.distance (see issue [https://github.com/OSGeo/grass/issues/6135 #6135]).&lt;br /&gt;
* Add JSON output support to v.class (see issue [https://github.com/OSGeo/grass/issues/6136 #6136]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-11 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.distance''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6204 #6204])&lt;br /&gt;
* '''v.class''': Updated regression tests to ensure backward compatibility with new JSON support and fixed a out-of-bounds bug. (See PR [https://github.com/OSGeo/grass/pull/6205 #6205])&lt;br /&gt;
* '''v.class''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6210 #6210])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Discuss next week’s tasks with my mentors, if no issues are assigned, I’ll identify tools that currently lack JSON support and evaluate which ones are feasible to add it to.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-12 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.what''': Update JSON output format. (See PR [https://github.com/OSGeo/grass/pull/6252 #6252])&lt;br /&gt;
* Addressed review comments on my open PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
= Final Report =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Title''' || Add JSON output to different tools in C for GRASS&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo (Open Source Geospatial Foundation)]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''Program''' || Google Summer of Code 2025&lt;br /&gt;
|-&lt;br /&gt;
| '''Contributions''' || [https://github.com/OSGeo/grass/pulls?q=is%3Apr+author%3ANishantBansal2003+ Pull Requests]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
During my GSoC project, I addressed the challenge that most GRASS tools produced only plain text output, forcing users to write custom parsing code for Python-based workflows. The task was to make these tools more data-science friendly by adding structured output formats. To achieve this, I extended the use of the Parson library to implement consistent JSON output across multiple modules, refined the JSON structure introduced in the previous GSoC, and added optional support for SHELL and CSV outputs where appropriate. I developed comprehensive Python test cases, ensured backward compatibility, and provided documentation with practical examples such as loading JSON into pandas. As a result, GRASS users can now directly consume structured outputs in modern workflows, reducing parsing overhead, improving interoperability, and paving the way for broader adoption of GRASS in data science contexts.&lt;br /&gt;
&lt;br /&gt;
== The state of integration BEFORE the start of GSoC ==&lt;br /&gt;
Before the start of GSoC, the integration of GRASS with data science workflows was limited due to several challenges. The JSON outputs introduced in the previous GSoC contained deeply nested hierarchies, making them difficult to use directly with libraries such as '''pandas''' or in broader data science pipelines. While some tools already supported JSON (e.g., &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;), many important and highly demanded modules lacked JSON support, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt; and many more. This lack of consistency limited the seamless adoption of GRASS in analytics and machine learning contexts. Moreover, there was no clear '''documentation of the JSON schema''' or guidance on how to parse and utilize these outputs effectively in '''python or pandas''', which made it difficult for users to understand the use cases and integrate GRASS outputs into modern data science workflows.&lt;br /&gt;
&lt;br /&gt;
== The state of integration AFTER GSoC ==&lt;br /&gt;
&lt;br /&gt;
After GSoC, the integration state of JSON and alternative output formats in GRASS has significantly improved. I refactored the JSON structures for tools such as &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;, and others, removing unnecessary nesting introduced during the previous GSoC. This makes their outputs much easier to consume directly in &amp;lt;b&amp;gt;Python&amp;lt;/b&amp;gt; or with &amp;lt;b&amp;gt;pandas&amp;lt;/b&amp;gt;. In addition, JSON support has been extended to many essential and frequently used modules, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;, and many more. I also added detailed documentation of the JSON schema and provided examples showing how to parse and use these outputs effectively with Python and pandas. Together, these improvements make the adoption of GRASS in modern &amp;lt;b&amp;gt;data science workflows&amp;lt;/b&amp;gt; far more seamless and accessible.&lt;br /&gt;
&lt;br /&gt;
=== Enhancements made per tool ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;: Simplified JSON structure for univariate statistics, removed unnecessary hierarchy, and added new output format options (CSV, shell).&lt;br /&gt;
* &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;: Added JSON support for querying raster map colors, with a Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;: Added JSON support for reporting the current mapset, with a Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;: Updated JSON structure for raster map metadata, removing hierarchy for easier parsing. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;: Simplified JSON output for geographic region boundaries, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;: Added JSON support for GRASS version information, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;: Added JSON support for listing imagery groups, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;: Added JSON and CSV support for raster area statistics, with Python and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;: Refined JSON schema for nearest element queries, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;: Added JSON support for listing GRASS database files, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;: Updated JSON schema for printing vector attribute values, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;: Simplified JSON output, added CSV support, and included a matplotlib example for profile visualization.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;: Updated JSON schema for linear regression between rasters, with Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;: Updated JSON schema for category quantiles, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;: Added JSON support for raster volume calculations, fixed missing headers in CSV output, and provided pandas examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.columns&amp;lt;/code&amp;gt;: Added JSON output for listing database table columns, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;: Added JSON output for measuring lengths and areas, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.connect&amp;lt;/code&amp;gt;: Added JSON output for DB connection info, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.multi&amp;lt;/code&amp;gt;: Added JSON output for multiple regression between rasters, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.db.connect&amp;lt;/code&amp;gt;: Added JSON output for vector map attribute connections, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.findfile&amp;lt;/code&amp;gt;: Added JSON output for GRASS database file search, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;: Added JSON output for 3D raster map info, with Python example. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;: Added JSON output for extracting raster values at vector points, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt;: Added JSON and CSV support for locating closest points between raster objects, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;: Added JSON and CSV support for attribute data, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;: Migrated from manually written JSON to Parson-based JSON output, simplified schema, and provided Python parsing examples.&lt;br /&gt;
&lt;br /&gt;
All these changes were accompanied by regression tests to ensure that new JSON/CSV/SHELL/PLAIN output options do not break existing functionality. Additionally, I introduced comprehensive Python test cases for these outputs, making the enhancements reliable and future-proof. During this work, I also fixed several bugs in modules such as &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;, strengthening the stability of GRASS as a whole.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
To sum up, I’m glad to have met the three core objectives of my project with the constant support of my mentors:&lt;br /&gt;
&lt;br /&gt;
* Brought JSON output to several important and long-requested modules, added regression tests, and ensured reliable future test coverage.&lt;br /&gt;
* Enhanced the JSON schema introduced in last year’s GSoC by reducing unnecessary hierarchy, making it more consistent across tools, and providing Python/Pandas examples for practical use.&lt;br /&gt;
* Expanded &amp;lt;b&amp;gt;CSV&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;SHELL&amp;lt;/b&amp;gt; output formats to additional tools where they could bring value.&lt;br /&gt;
&lt;br /&gt;
This journey has been both rewarding and educational, and I’m grateful for the opportunity to contribute to GRASS through GSoC 2025. I especially want to thank &amp;lt;b&amp;gt;Anna Petrasova&amp;lt;/b&amp;gt; and the GRASS Development Team for their guidance and support. I’m excited to keep building on this work and further extend JSON and other features in the future.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
There is significant scope to extend structured output support across GRASS tools. In particular, future efforts should focus on:&lt;br /&gt;
* Expanding JSON output to additional modules, with details tracked here: [https://github.com/orgs/OSGeo/projects/10 GRASS JSON Outputs Project].&lt;br /&gt;
* Refining and standardizing the JSON schema to better support complex workflows and integrations.&lt;br /&gt;
* Exploring and implementing other output formats (e.g., SHELL, CSV, PLAIN) where they can improve usability and automation.&lt;br /&gt;
I also plan to continue contributing to GRASS by extending JSON support to more modules and engaging in community discussions around schema design and format integration.&lt;br /&gt;
&lt;br /&gt;
== Log of Pull Requests ==&lt;br /&gt;
Below is a list of pull requests submitted to the GRASS repository during GSoC 2025:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pull Request !! Description  !! Date   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5688 #5688] || r.univar: Fix JSON structure || May 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5773 #5773] || r.what.color: Add test file || May 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5775 #5775] || g.mapset: Add test file || May 26, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5784 #5784] || r.info: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;Closed&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5785 #5785] || g.region: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5810 #5810] || g.mapset: Add JSON support || June 2, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5821 #5821] || r.univar: Fix uninitialized zone_value || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5822 #5822] || r.what.color: Add JSON support || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5842 #5842] || r.info: Update test file || June 5, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5859 #5859] || r.info: Improve interface || June 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5863 #5863] || g.version: Add JSON support || June 9, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5870 #5870] || i.group: Add JSON support || June 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5879 #5879] || r.stats: Add test file || June 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5892 #5892] || r.stats: Add tests for JSON output || June 14, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5898 #5898] || v.distance: Update JSON format || June 16, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5900 #5900] || r.stats: fix uninitialised window value || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5906 #5906] || g.list: Add test file || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5921 #5921] || g.list: Add JSON support || June 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5929 #5929] || g.region: Update JSON format || June 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5946 #5946] || v.to.db: Update JSON format || June 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5962 #5962] || r.profile: Update JSON format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5966 #5966] || r.univar: Add shell and CSV format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5990 #5990] || r.regression.line: Add test file || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5993 #5993] || r.regression.line: Add JSON support || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6002 #6002] || r.stats.quantile: Add test file || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6007 #6007] || r.stats.quantile: Add JSON support || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6027 #6027] || r.volume: Add test file || July 4, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6036 #6036] || r.volume: Add JSON support || July 6, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6042 #6042] || db.columns: Add JSON support || July 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6051 #6051] || m.measure: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6052 #6052] || db.connect: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6053 #6053] || m.measure: Add JSON support || July 11, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6059 #6059] || db.connect: Add JSON support || July 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6066 #6066] || r.regression.multi: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6067 #6067] || v.db.connect: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6075 #6075] || r.regression.multi: Add JSON support || July 18, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6077 #6077] || v.db.connect: Add JSON support || July 19, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6091 #6091] || g.findfile: Add JSON support || July 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6098 #6098] || r3.info: Add test file || July 22, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6103 #6103] || r3.info: Add JSON support || July 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6109 #6109] || v.what.rast: Add test file || July 24, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6132 #6132] || v.category: Use CSV format instead of shell format || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6133 #6133] || r.stats: add CSV support || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6134 #6134] || r.volume: add csv column headers || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6140 #6140] || v.what.rast: Add JSON support || July 29, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6145 #6145] || r.profile: Add CSV support || July 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6150 #6150] || r.distance: Update existing test cases || August 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6204 #6204] || r.distance: Add JSON and CSV support || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6205 #6205] || v.class: Add more test cases and fix out-of-bounds bug || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6210 #6210] || v.class: Add JSON and CSV support || August 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6252 #6252] || v.what: Update JSON output format || August 23, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Additional Links ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Ttile&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| OSGeo Wiki Page&lt;br /&gt;
| [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C Add JSON output to different tools in C for GRASS]&lt;br /&gt;
|-&lt;br /&gt;
| Github Fork&lt;br /&gt;
| [https://github.com/NishantBansal2003/grass GitHub Fork]&lt;br /&gt;
|-&lt;br /&gt;
| GSoC Page&lt;br /&gt;
| [https://summerofcode.withgoogle.com/programs/2025/projects/GPVGd3DH Link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples &amp;amp; Images ==&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; JSON output in Python ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; can be directly loaded into a pandas DataFrame and used for plotting with matplotlib.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
# Run r.profile command&lt;br /&gt;
elevation = gs.read_command(&lt;br /&gt;
    &amp;quot;r.profile&amp;quot;,&lt;br /&gt;
    input=&amp;quot;elevation&amp;quot;,&lt;br /&gt;
    coordinates=&amp;quot;641712,226095,641546,224138,641546,222048,641049,221186&amp;quot;,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
    flags=&amp;quot;gc&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Load the JSON data into a dataframe&lt;br /&gt;
df = pd.read_json(elevation)&lt;br /&gt;
print(df)&lt;br /&gt;
&lt;br /&gt;
# Create the scatter plot&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
plt.scatter(df[&amp;quot;distance&amp;quot;], df[&amp;quot;value&amp;quot;], c=df[&amp;quot;color&amp;quot;], marker=&amp;quot;o&amp;quot;)&lt;br /&gt;
plt.title(&amp;quot;Profile of Distance vs. Elevation with Color Coding&amp;quot;)&lt;br /&gt;
plt.xlabel(&amp;quot;Distance (meters)&amp;quot;)&lt;br /&gt;
plt.ylabel(&amp;quot;Elevation&amp;quot;)&lt;br /&gt;
plt.grid(True)&lt;br /&gt;
plt.show()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame Output (first 10 rows) ====  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
         easting       northing   distance      value    color&lt;br /&gt;
0  641712.000000  226095.000000   0.000000  84.661507  #71FF00&lt;br /&gt;
1  641711.154826  226085.036106   9.999675  84.511765  #6FFF00&lt;br /&gt;
2  641710.309651  226075.072213  19.999349  84.241806  #6BFF00&lt;br /&gt;
3  641709.464477  226065.108319  29.999024  84.304214  #6CFF00&lt;br /&gt;
4  641708.619302  226055.144426  39.998699  84.174400  #6AFF00&lt;br /&gt;
5  641707.774128  226045.180532  49.998374  84.112534  #6AFF00&lt;br /&gt;
6  641706.928954  226035.216639  59.998048  84.011208  #68FF00&lt;br /&gt;
7  641706.083779  226025.252745  69.997723  83.834084  #66FF00&lt;br /&gt;
8  641705.238605  226015.288851  79.997398  83.870193  #67FF00&lt;br /&gt;
9  641704.393430  226005.324958  89.997073  84.194908  #6BFF00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Visualization ====  &lt;br /&gt;
&lt;br /&gt;
Matplotlib scatter plot generated from the &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; JSON output: &lt;br /&gt;
&lt;br /&gt;
[[File:R profile plot.png]]&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt; can be directly loaded into a pandas DataFrame.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.class&amp;quot;,&lt;br /&gt;
    map=&amp;quot;bridges&amp;quot;,&lt;br /&gt;
    column=&amp;quot;YEAR_BUILT&amp;quot;,&lt;br /&gt;
    algorithm=&amp;quot;std&amp;quot;,&lt;br /&gt;
    nbclasses=5,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data[&amp;quot;intervals&amp;quot;])&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output (intervals) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
          from           to  frequency&lt;br /&gt;
0  1891.000000  1938.829689        750&lt;br /&gt;
1  1938.829689  1954.722836       1841&lt;br /&gt;
2  1954.722836  1970.615983       5556&lt;br /&gt;
3  1970.615983  1986.509130       1788&lt;br /&gt;
4  1986.509130  1997.000000       1003&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame to display categories and values.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.what.rast&amp;quot;, map=&amp;quot;bridges&amp;quot;, raster=&amp;quot;elevation&amp;quot;, flags=&amp;quot;p&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    category       value&lt;br /&gt;
0       4635   86.851212&lt;br /&gt;
1       4648   87.883255&lt;br /&gt;
2       4688  103.382004&lt;br /&gt;
3       4709   67.387856&lt;br /&gt;
4       4986   90.972832&lt;br /&gt;
5       4991   86.550629&lt;br /&gt;
6       5027   84.256355&lt;br /&gt;
7       5060   79.500443&lt;br /&gt;
8       5071   78.732864&lt;br /&gt;
9       5089   85.703636&lt;br /&gt;
10      5096  115.967323&lt;br /&gt;
11      5130   81.055870&lt;br /&gt;
12      5150   92.812927&lt;br /&gt;
13      5166   88.149483&lt;br /&gt;
14      5184   76.426331&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test Suite Update ====&lt;br /&gt;
Added 6 tests to the test suite, including both regression tests and future-proof tests to ensure functionality remains reliable in future updates.&lt;br /&gt;
&lt;br /&gt;
[[File:Test file.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame to locate closest points.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
&lt;br /&gt;
result = gs.parse_command(&lt;br /&gt;
    &amp;quot;r.distance&amp;quot;, map=[&amp;quot;zipcodes&amp;quot;, &amp;quot;lakes&amp;quot;], flags=&amp;quot;l&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
df = pd.json_normalize(result)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output (first 10 rows, truncated) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
       distance  from_cell.category  from_cell.easting  ...  to_cell.easting to_cell.northing  to_cell.label&lt;br /&gt;
0  11158.507466               27511      632604.951740  ...    640584.676990    215499.220687       Dam/Weir&lt;br /&gt;
1   1037.271198               27511      631734.981693  ...    632314.961724    221839.026534      Lake/Pond&lt;br /&gt;
2   2276.988836               27511      630015.040913  ...    630765.015090    219459.099418      Reservoir&lt;br /&gt;
3  14614.155031               27513      631055.005106  ...    640584.676990    215499.220687       Dam/Weir&lt;br /&gt;
4   3635.876453               27513      631674.983759  ...    635164.863600    227198.862392      Lake/Pond&lt;br /&gt;
5   6971.335517               27513      630005.041257  ...    630765.015090    219459.099418      Reservoir&lt;br /&gt;
6   8978.927486               27518      632134.967922  ...    640424.682499    215209.229568       Dam/Weir&lt;br /&gt;
7      0.000000               27518      630005.041257  ...    630005.041257    220199.076757      Lake/Pond&lt;br /&gt;
8    699.975899               27518      630005.041257  ...    630705.017156    219379.101868      Reservoir&lt;br /&gt;
9    509.197766               27529      641154.657366  ...    640674.673892    215249.228343       Dam/Weir&lt;br /&gt;
&lt;br /&gt;
[10 rows x 9 columns]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.distance&amp;quot;,&lt;br /&gt;
    flags=&amp;quot;p&amp;quot;,&lt;br /&gt;
    from_=&amp;quot;busroute_a&amp;quot;,&lt;br /&gt;
    to=&amp;quot;busstopsall&amp;quot;,&lt;br /&gt;
    upload=&amp;quot;dist,to_attr&amp;quot;,&lt;br /&gt;
    to_column=&amp;quot;routes&amp;quot;,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
   from_cat  to_cat      dist to_attr&lt;br /&gt;
0         1     112  0.142812     8,A&lt;br /&gt;
1         2      44  0.102327     9,A&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;r.volume&amp;quot;, input=&amp;quot;elevation&amp;quot;, clump=&amp;quot;geology_30m&amp;quot;, flags=&amp;quot;p&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    category  average         sum   cells        volume  easting  northing&lt;br /&gt;
0        217   118.93 86288827.99  725562 8628882798.63   635325    221535&lt;br /&gt;
1        262   108.97 21650560.37  198684 2165056037.02   638935    222495&lt;br /&gt;
2        270    92.23 63578874.44  689373 6357887443.53   642405    221485&lt;br /&gt;
3        405   132.96 33732662.09  253710 3373266208.59   631835    224095&lt;br /&gt;
4        583   139.35  3011288.22   21609  301128821.55   630205    224665&lt;br /&gt;
5        720   124.30   599618.16    4824   59961816.06   634075    227995&lt;br /&gt;
6        766   132.43   936791.20    7074   93679120.08   631425    227845&lt;br /&gt;
7        862   118.31  7302317.47   61722  730231746.74   630505    218885&lt;br /&gt;
8        910    94.20  4235816.13   44964  423581613.11   639215    216365&lt;br /&gt;
9        921   135.22  1693985.23   12528  169398523.05   630755    215445&lt;br /&gt;
10       945   127.24     1145.12       9     114512.03   630015    215015&lt;br /&gt;
11       946    89.91   365748.34    4068   36574833.85   639085    215255&lt;br /&gt;
12       948   129.02   112631.82     873   11263181.57   630185    215115&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{GSoC}}&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=File:Test_file.png&amp;diff=28674</id>
		<title>File:Test file.png</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=File:Test_file.png&amp;diff=28674"/>
		<updated>2025-08-24T07:44:31Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;test file&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28673</id>
		<title>GRASS GSoC 2025 Add JSON output to different tools in C</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28673"/>
		<updated>2025-08-24T07:32:32Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: /* Examples &amp;amp; Images */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Nishant Bansal&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo - Open Source Geospatial Foundation]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/NishantBansal2003/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''GSoC proposal''' || [https://docs.google.com/document/d/1ZPQ9RXU7b_RUDmBmAMeK7ZjFAV1WC7Urd1Zlz678jyw/edit?tab=t.0#heading=h.z6ne0og04bp5 View Proposal]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Abstract =&lt;br /&gt;
Currently, most GRASS tools produce data in plain text by default. This means that users who want to process the output in Python need to create custom parsing code. To make this easier, several modules could be improved by oﬀering JSON as an alternative output format. Recently, the Parson library was added to the GRASS codebase to support JSON output in addition to plain text. Building on the advancements made during the last GSoC, my project aims to expand JSON output capabilities to more tools using the Parson library. I will also work on making the JSON structure introduced in the previous GSoC more useful and consistent. Additionally, I plan to add support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
&lt;br /&gt;
# Working with mentors to finalize the structure of the JSON output.&lt;br /&gt;
# Adding an option to choose the output format (plain text or JSON) for each updated tool.&lt;br /&gt;
# Make the JSON structure introduced during the last GSoC more useful and consistent across tools.&lt;br /&gt;
# Developing Python test cases to ensure that the JSON output works correctly and to avoid future issues.&lt;br /&gt;
# Providing basic documentation and example JSON outputs for each modified tool.&lt;br /&gt;
# Adding support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
# Develop simple examples demonstrating how to use JSON output in a data science workflow, such as reading JSON data into pandas or python.&lt;br /&gt;
&lt;br /&gt;
= Timeline =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Period !! Timeline  !! Tasks   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period &lt;br /&gt;
||&lt;br /&gt;
May 8 - June 1  &lt;br /&gt;
|| &lt;br /&gt;
# Reviewed the work done during the last GSoC to stabilize the JSON output.&lt;br /&gt;
# Discussed the priority tools for adding JSON support.&lt;br /&gt;
# Read GRASS documentation to add Python and JSON examples to the documentation.&lt;br /&gt;
|| &lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;13&amp;quot; | Official Coding Period &lt;br /&gt;
|-&lt;br /&gt;
| '''Week 1''' (June 2 - June 8) || &lt;br /&gt;
# Add JSON support for g.mapset [https://github.com/OSGeo/grass/pull/5810 #5810]&lt;br /&gt;
# Fix uninitialized zone_value in r.univar [https://github.com/OSGeo/grass/pull/5821 #5821]&lt;br /&gt;
# Add JSON support for r.what.color [https://github.com/OSGeo/grass/pull/5822 #5822]&lt;br /&gt;
# Update test file in r.info [https://github.com/OSGeo/grass/pull/5842 #5842]&lt;br /&gt;
# Improve interface for r.info [https://github.com/OSGeo/grass/pull/5859 #5859]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 2''' (June 9 - June 15) ||&lt;br /&gt;
# Add JSON support for g.version [https://github.com/OSGeo/grass/pull/5863 #5863]&lt;br /&gt;
# Add JSON support for i.group [https://github.com/OSGeo/grass/pull/5870 #5870]&lt;br /&gt;
# Add test file in r.stats [https://github.com/OSGeo/grass/pull/5879 #5879]&lt;br /&gt;
# Add tests for JSON output in r.stats [https://github.com/OSGeo/grass/pull/5892 #5892]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 3''' (June 16 - June 22) ||&lt;br /&gt;
# Update the JSON output schema of v.distance [https://github.com/OSGeo/grass/pull/5898 #5898]&lt;br /&gt;
# Fix uninitialized window variable in r.stats [https://github.com/OSGeo/grass/pull/5900 #5900]&lt;br /&gt;
# Add test file in g.list [https://github.com/OSGeo/grass/pull/5906 #5906]&lt;br /&gt;
# Add JSON support for g.list [https://github.com/OSGeo/grass/pull/5921 #5921]&lt;br /&gt;
# Update the JSON output schema of g.region [https://github.com/OSGeo/grass/pull/5929 #5929]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 4''' (June 23 - June 29) ||&lt;br /&gt;
# Update the JSON output schema of v.to.db [https://github.com/OSGeo/grass/pull/5946 #5946]&lt;br /&gt;
# Update the JSON output schema of r.profile [https://github.com/OSGeo/grass/pull/5962 #5962]&lt;br /&gt;
# Add SHELL and CSV output support for r.univar [https://github.com/OSGeo/grass/pull/5966 #5966]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 5''' (June 30 - July 6) ||&lt;br /&gt;
# Add test file in r.regression.line [https://github.com/OSGeo/grass/pull/5990 #5990]&lt;br /&gt;
# Add JSON support for r.regression.line [https://github.com/OSGeo/grass/pull/5993 #5993]&lt;br /&gt;
# Add test file in r.stats.quantile [https://github.com/OSGeo/grass/pull/6002 #6002]&lt;br /&gt;
# Add JSON support for r.stats.quantile [https://github.com/OSGeo/grass/pull/6007 #6007]&lt;br /&gt;
# Add test file in r.volume [https://github.com/OSGeo/grass/pull/6027 #6027]&lt;br /&gt;
# Add JSON support for r.volume [https://github.com/OSGeo/grass/pull/6036 #6036]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 6''' (July 7 - July 13) ||&lt;br /&gt;
# Add JSON support for db.columns [https://github.com/OSGeo/grass/pull/6042 #6042]&lt;br /&gt;
# Add test file in m.measure [https://github.com/OSGeo/grass/pull/6051 #6051]&lt;br /&gt;
# Add test file in db.connect [https://github.com/OSGeo/grass/pull/6052 #6052]&lt;br /&gt;
# Add JSON support for m.measure [https://github.com/OSGeo/grass/pull/6053 #6053]&lt;br /&gt;
# Add JSON support for db.connect [https://github.com/OSGeo/grass/pull/6059 #6059]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | '''Week 7''' (July 14 - July 20) ||&lt;br /&gt;
# Add test file in r.regression.multi [https://github.com/OSGeo/grass/pull/6066 #6066]&lt;br /&gt;
# Add test file in v.db.connect [https://github.com/OSGeo/grass/pull/6067 #6067]&lt;br /&gt;
# Add JSON support for r.regression.multi [https://github.com/OSGeo/grass/pull/6075 #6075]&lt;br /&gt;
# Add JSON support for v.db.connect [https://github.com/OSGeo/grass/pull/6077 #6077]&lt;br /&gt;
# Submit MidTerm evaluation.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 8''' (July 21 - July 27) ||&lt;br /&gt;
# Add JSON support for g.findfile [https://github.com/OSGeo/grass/pull/6091 #6091]&lt;br /&gt;
# Add test file in r3.info [https://github.com/OSGeo/grass/pull/6098 #6098]&lt;br /&gt;
# Add JSON support for r3.info [https://github.com/OSGeo/grass/pull/6103 #6103]&lt;br /&gt;
# Add test file in v.what.rast [https://github.com/OSGeo/grass/pull/6109 #6109]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 9''' (July 28 - August 3) ||&lt;br /&gt;
# Update format to CSV instead of shell in v.category [https://github.com/OSGeo/grass/pull/6132 #6132]&lt;br /&gt;
# Add CSV output support to r.stats [https://github.com/OSGeo/grass/pull/6133 #6133]&lt;br /&gt;
# Add CSV headers to r.volume [https://github.com/OSGeo/grass/pull/6134 #6134]&lt;br /&gt;
# Add JSON support for v.what.rast [https://github.com/OSGeo/grass/pull/6140 #6140]&lt;br /&gt;
# Add CSV output support to r.profile [https://github.com/OSGeo/grass/pull/6145 #6145]&lt;br /&gt;
# Update test cases in r.distance [https://github.com/OSGeo/grass/pull/6150 #6150]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 10''' (August 4 - August 10) ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 11''' (August 11 - August 17) ||&lt;br /&gt;
# Add JSON and CSV support for r.distance [https://github.com/OSGeo/grass/pull/6204 #6204]&lt;br /&gt;
# Add more test cases in v.class [https://github.com/OSGeo/grass/pull/6205 #6205]&lt;br /&gt;
# Add JSON and CSV support for v.class [https://github.com/OSGeo/grass/pull/6210 #6210]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 12''' (August 18 - August 24) ||&lt;br /&gt;
# Update JSON output format for v.what [https://github.com/OSGeo/grass/pull/6252 #6252]&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Evaluation Period &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | August 25 - September 1 ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
# Submit code, final evaluation and write the final GSoC report.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Reports =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* Introduced myself on the [https://discourse.osgeo.org/t/gsoc-2025-introduction-nishant-bansal/147005 OSGeo Discourse mailing list].&lt;br /&gt;
* Created both my [https://wiki.osgeo.org/wiki/User:Nishantbansal2003 personal Wiki page] and the [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C project Wiki page], adding all necessary project-related information.&lt;br /&gt;
* Read GRASS documentation to support the addition of Python and JSON examples.&lt;br /&gt;
* Worked on the following pull requests:&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5688 #5688]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5773 #5773]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5775 #5775]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5784 #5784]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5785 #5785]&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to the g.mapset and r.what.color modules.&lt;br /&gt;
* If time permits, I will begin improving the r.info interface: [https://github.com/OSGeo/grass/issues/5793 Issue #5793]&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
'''Project Discussions and Meetings'''&lt;br /&gt;
* '''14 May 2025''': Introductory meeting discussing JSON support and overall project milestones.&lt;br /&gt;
* '''21 May 2025''': Introduction with fellow developers. Discussed priority tools, adding Python/Pandas examples, and approaches for finalizing the JSON schema for each module.&lt;br /&gt;
&lt;br /&gt;
== Week-1 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.mapset''': Added JSON output support, now you can use -p and -l flags to get JSON-formatted results.&lt;br /&gt;
* '''r.univar''': Fixed a bug causing an uninitialized zone_value.&lt;br /&gt;
* '''r.what.color''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5822 #5822])&lt;br /&gt;
* '''r.info (regression tests)''': To maintain backward compatibility while updating its interface, I added strong regression tests.&lt;br /&gt;
* '''r.info (interface improvements)''': Began improving the module’s interface. (See PR [https://github.com/OSGeo/grass/pull/5859 #5859])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.version (see issue [https://github.com/OSGeo/grass/issues/5816 #5816]).&lt;br /&gt;
* Add JSON output support to i.group (see issue [https://github.com/OSGeo/grass/issues/5815 #5815]).&lt;br /&gt;
* If time permits, write tests for r.stats (see issue [https://github.com/OSGeo/grass/issues/5814 #5814]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-2 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.version''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5863 #5863])&lt;br /&gt;
* '''i.group''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5870 #5870])&lt;br /&gt;
* '''r.stats (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats''': Added tests for JSON output; this uncovered a bug, which was fixed alongside.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.distance (see issue [https://github.com/OSGeo/grass/issues/5846 #5846]).&lt;br /&gt;
* Add JSON output support to g.list (see issue [https://github.com/OSGeo/grass/issues/5848 #5848]).&lt;br /&gt;
* If time permits, fix the JSON output format of g.region (see issue [https://github.com/OSGeo/grass/issues/5828 #5828]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-3 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.distance''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5898 #5898])&lt;br /&gt;
* '''r.stats''': Fixed a bug causing an uninitialized &amp;lt;code&amp;gt;window&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
* '''g.list (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''g.list''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5921 #5921])&lt;br /&gt;
* '''g.region''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5929 #5929])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.to.db (see issue [https://github.com/OSGeo/grass/pull/5711 #5711]).&lt;br /&gt;
* Update JSON output format and documentation of r.profile (see issue [https://github.com/OSGeo/grass/pull/5834 #5834]).&lt;br /&gt;
* If time permits, add shell and csv output formats to r.univar (see issue [https://github.com/OSGeo/grass/pull/5824 #5824]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-4 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.to.db''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5946 #5946])&lt;br /&gt;
* '''r.profile''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5962 #5962])&lt;br /&gt;
* '''r.univar''': Implemented SHELL and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/5966 #5966])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.regression.line (see issue [https://github.com/OSGeo/grass/pull/5950 #5950]).&lt;br /&gt;
* Add JSON output support to r.stats.quantile (see issue [https://github.com/OSGeo/grass/pull/5951 #5951]).&lt;br /&gt;
* Add JSON output support to r.volume (see issue [https://github.com/OSGeo/grass/pull/5949 #5949]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-5 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.line (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.line''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5993 #5993])&lt;br /&gt;
* '''r.stats.quantile (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats.quantile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6007 #6007])&lt;br /&gt;
* '''r.volume (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.volume''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6036 #6036])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to m.measure (see issue [https://github.com/OSGeo/grass/pull/6006 #6006]).&lt;br /&gt;
* Add JSON output support to db.columns (see issue [https://github.com/OSGeo/grass/pull/6008 #6008]).&lt;br /&gt;
* Add JSON output support to db.connect (see issue [https://github.com/OSGeo/grass/pull/6009 #6009]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-6 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''db.columns''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6042 #6042])&lt;br /&gt;
* '''m.measure (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''m.measure''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6053 #6053])&lt;br /&gt;
* '''db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6059 #6059])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to v.db.connect (see issue [https://github.com/OSGeo/grass/pull/6014 #6014]).&lt;br /&gt;
* Add JSON output support to r.regression.multi (see issue [https://github.com/OSGeo/grass/pull/6010 #6010]).&lt;br /&gt;
* If time permits, add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* If time permits, add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-7 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.multi (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''v.db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.multi''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6075 #6075])&lt;br /&gt;
* '''v.db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6077 #6077])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* Add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
* If time permits, add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-8 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.findfile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6091 #6091])&lt;br /&gt;
* '''r3.info (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a flag-handling bug.&lt;br /&gt;
* '''r3.info''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6103 #6103])&lt;br /&gt;
* '''v.what.rast (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a sorting bug.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
* Update format to CSV instead of shell in v.category (see issue [https://github.com/OSGeo/grass/pull/6025 #6025]).&lt;br /&gt;
* Add CSV output support to r.stats (see issue [https://github.com/OSGeo/grass/issues/5835 #5835]).&lt;br /&gt;
* If time permits, add CSV output support to r.profile (see issue [https://github.com/OSGeo/grass/issues/5958 #5958]).&lt;br /&gt;
* If time permits, add CSV headers to r.volume (see issue [https://github.com/OSGeo/grass/issues/6049 #6049]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I don’t have any blockers this week. However, I’ll be a little busy with some personal work from August 3 to August 10, so I’ll try to complete next week’s tasks this week itself.&lt;br /&gt;
&lt;br /&gt;
== Week-9 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.category''': Updated format to CSV instead of shell. (See PR [https://github.com/OSGeo/grass/pull/6132 #6132])&lt;br /&gt;
* '''r.stats''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6133 #6133])&lt;br /&gt;
* '''r.volume''': Implemented CSV column headers support. (See PR [https://github.com/OSGeo/grass/pull/6134 #6134])&lt;br /&gt;
* '''v.what.rast''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6140 #6140])&lt;br /&gt;
* '''r.profile''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6145 #6145])&lt;br /&gt;
* '''r.distance (regression tests)''': Updated regression tests to ensure backward compatibility with new JSON support. (See PR [https://github.com/OSGeo/grass/pull/6150 #6150])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* I’ll be a bit busy with some personal work from August 3 to 10, so I completed next week’s tasks last week itself. I’ve already informed my mentors about my limited availability.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* Yes, I’ll be a bit busy with some personal work from August 3 to 10.&lt;br /&gt;
&lt;br /&gt;
== Week-10 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* This week I was busy with some personal work, so I did not complete any additional tasks. However, I had already finished this week’s tasks last week. This week, I mostly focused on handling reviews for those PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.distance (see issue [https://github.com/OSGeo/grass/issues/6135 #6135]).&lt;br /&gt;
* Add JSON output support to v.class (see issue [https://github.com/OSGeo/grass/issues/6136 #6136]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-11 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.distance''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6204 #6204])&lt;br /&gt;
* '''v.class''': Updated regression tests to ensure backward compatibility with new JSON support and fixed a out-of-bounds bug. (See PR [https://github.com/OSGeo/grass/pull/6205 #6205])&lt;br /&gt;
* '''v.class''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6210 #6210])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Discuss next week’s tasks with my mentors, if no issues are assigned, I’ll identify tools that currently lack JSON support and evaluate which ones are feasible to add it to.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-12 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.what''': Update JSON output format. (See PR [https://github.com/OSGeo/grass/pull/6252 #6252])&lt;br /&gt;
* Addressed review comments on my open PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
= Final Report =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Title''' || Add JSON output to different tools in C for GRASS&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo (Open Source Geospatial Foundation)]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''Program''' || Google Summer of Code 2025&lt;br /&gt;
|-&lt;br /&gt;
| '''Contributions''' || [https://github.com/OSGeo/grass/pulls?q=is%3Apr+author%3ANishantBansal2003+ Pull Requests]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
During my GSoC project, I addressed the challenge that most GRASS tools produced only plain text output, forcing users to write custom parsing code for Python-based workflows. The task was to make these tools more data-science friendly by adding structured output formats. To achieve this, I extended the use of the Parson library to implement consistent JSON output across multiple modules, refined the JSON structure introduced in the previous GSoC, and added optional support for SHELL and CSV outputs where appropriate. I developed comprehensive Python test cases, ensured backward compatibility, and provided documentation with practical examples such as loading JSON into pandas. As a result, GRASS users can now directly consume structured outputs in modern workflows, reducing parsing overhead, improving interoperability, and paving the way for broader adoption of GRASS in data science contexts.&lt;br /&gt;
&lt;br /&gt;
== The state of integration BEFORE the start of GSoC ==&lt;br /&gt;
Before the start of GSoC, the integration of GRASS with data science workflows was limited due to several challenges. The JSON outputs introduced in the previous GSoC contained deeply nested hierarchies, making them difficult to use directly with libraries such as '''pandas''' or in broader data science pipelines. While some tools already supported JSON (e.g., &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;), many important and highly demanded modules lacked JSON support, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt; and many more. This lack of consistency limited the seamless adoption of GRASS in analytics and machine learning contexts. Moreover, there was no clear '''documentation of the JSON schema''' or guidance on how to parse and utilize these outputs effectively in '''python or pandas''', which made it difficult for users to understand the use cases and integrate GRASS outputs into modern data science workflows.&lt;br /&gt;
&lt;br /&gt;
== The state of integration AFTER GSoC ==&lt;br /&gt;
&lt;br /&gt;
After GSoC, the integration state of JSON and alternative output formats in GRASS has significantly improved. I refactored the JSON structures for tools such as &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;, and others, removing unnecessary nesting introduced during the previous GSoC. This makes their outputs much easier to consume directly in &amp;lt;b&amp;gt;Python&amp;lt;/b&amp;gt; or with &amp;lt;b&amp;gt;pandas&amp;lt;/b&amp;gt;. In addition, JSON support has been extended to many essential and frequently used modules, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;, and many more. I also added detailed documentation of the JSON schema and provided examples showing how to parse and use these outputs effectively with Python and pandas. Together, these improvements make the adoption of GRASS in modern &amp;lt;b&amp;gt;data science workflows&amp;lt;/b&amp;gt; far more seamless and accessible.&lt;br /&gt;
&lt;br /&gt;
=== Enhancements made per tool ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;: Simplified JSON structure for univariate statistics, removed unnecessary hierarchy, and added new output format options (CSV, shell).&lt;br /&gt;
* &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;: Added JSON support for querying raster map colors, with a Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;: Added JSON support for reporting the current mapset, with a Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;: Updated JSON structure for raster map metadata, removing hierarchy for easier parsing. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;: Simplified JSON output for geographic region boundaries, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;: Added JSON support for GRASS version information, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;: Added JSON support for listing imagery groups, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;: Added JSON and CSV support for raster area statistics, with Python and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;: Refined JSON schema for nearest element queries, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;: Added JSON support for listing GRASS database files, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;: Updated JSON schema for printing vector attribute values, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;: Simplified JSON output, added CSV support, and included a matplotlib example for profile visualization.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;: Updated JSON schema for linear regression between rasters, with Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;: Updated JSON schema for category quantiles, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;: Added JSON support for raster volume calculations, fixed missing headers in CSV output, and provided pandas examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.columns&amp;lt;/code&amp;gt;: Added JSON output for listing database table columns, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;: Added JSON output for measuring lengths and areas, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.connect&amp;lt;/code&amp;gt;: Added JSON output for DB connection info, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.multi&amp;lt;/code&amp;gt;: Added JSON output for multiple regression between rasters, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.db.connect&amp;lt;/code&amp;gt;: Added JSON output for vector map attribute connections, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.findfile&amp;lt;/code&amp;gt;: Added JSON output for GRASS database file search, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;: Added JSON output for 3D raster map info, with Python example. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;: Added JSON output for extracting raster values at vector points, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt;: Added JSON and CSV support for locating closest points between raster objects, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;: Added JSON and CSV support for attribute data, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;: Migrated from manually written JSON to Parson-based JSON output, simplified schema, and provided Python parsing examples.&lt;br /&gt;
&lt;br /&gt;
All these changes were accompanied by regression tests to ensure that new JSON/CSV/SHELL/PLAIN output options do not break existing functionality. Additionally, I introduced comprehensive Python test cases for these outputs, making the enhancements reliable and future-proof. During this work, I also fixed several bugs in modules such as &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;, strengthening the stability of GRASS as a whole.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
To sum up, I’m glad to have met the three core objectives of my project with the constant support of my mentors:&lt;br /&gt;
&lt;br /&gt;
* Brought JSON output to several important and long-requested modules, added regression tests, and ensured reliable future test coverage.&lt;br /&gt;
* Enhanced the JSON schema introduced in last year’s GSoC by reducing unnecessary hierarchy, making it more consistent across tools, and providing Python/Pandas examples for practical use.&lt;br /&gt;
* Expanded &amp;lt;b&amp;gt;CSV&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;SHELL&amp;lt;/b&amp;gt; output formats to additional tools where they could bring value.&lt;br /&gt;
&lt;br /&gt;
This journey has been both rewarding and educational, and I’m grateful for the opportunity to contribute to GRASS through GSoC 2025. I especially want to thank &amp;lt;b&amp;gt;Anna Petrasova&amp;lt;/b&amp;gt; and the GRASS Development Team for their guidance and support. I’m excited to keep building on this work and further extend JSON and other features in the future.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
There is significant scope to extend structured output support across GRASS tools. In particular, future efforts should focus on:&lt;br /&gt;
* Expanding JSON output to additional modules, with details tracked here: [https://github.com/orgs/OSGeo/projects/10 GRASS JSON Outputs Project].&lt;br /&gt;
* Refining and standardizing the JSON schema to better support complex workflows and integrations.&lt;br /&gt;
* Exploring and implementing other output formats (e.g., SHELL, CSV, PLAIN) where they can improve usability and automation.&lt;br /&gt;
I also plan to continue contributing to GRASS by extending JSON support to more modules and engaging in community discussions around schema design and format integration.&lt;br /&gt;
&lt;br /&gt;
== Log of Pull Requests ==&lt;br /&gt;
Below is a list of pull requests submitted to the GRASS repository during GSoC 2025:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pull Request !! Description  !! Date   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5688 #5688] || r.univar: Fix JSON structure || May 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5773 #5773] || r.what.color: Add test file || May 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5775 #5775] || g.mapset: Add test file || May 26, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5784 #5784] || r.info: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;Closed&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5785 #5785] || g.region: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5810 #5810] || g.mapset: Add JSON support || June 2, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5821 #5821] || r.univar: Fix uninitialized zone_value || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5822 #5822] || r.what.color: Add JSON support || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5842 #5842] || r.info: Update test file || June 5, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5859 #5859] || r.info: Improve interface || June 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5863 #5863] || g.version: Add JSON support || June 9, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5870 #5870] || i.group: Add JSON support || June 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5879 #5879] || r.stats: Add test file || June 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5892 #5892] || r.stats: Add tests for JSON output || June 14, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5898 #5898] || v.distance: Update JSON format || June 16, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5900 #5900] || r.stats: fix uninitialised window value || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5906 #5906] || g.list: Add test file || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5921 #5921] || g.list: Add JSON support || June 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5929 #5929] || g.region: Update JSON format || June 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5946 #5946] || v.to.db: Update JSON format || June 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5962 #5962] || r.profile: Update JSON format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5966 #5966] || r.univar: Add shell and CSV format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5990 #5990] || r.regression.line: Add test file || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5993 #5993] || r.regression.line: Add JSON support || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6002 #6002] || r.stats.quantile: Add test file || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6007 #6007] || r.stats.quantile: Add JSON support || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6027 #6027] || r.volume: Add test file || July 4, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6036 #6036] || r.volume: Add JSON support || July 6, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6042 #6042] || db.columns: Add JSON support || July 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6051 #6051] || m.measure: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6052 #6052] || db.connect: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6053 #6053] || m.measure: Add JSON support || July 11, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6059 #6059] || db.connect: Add JSON support || July 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6066 #6066] || r.regression.multi: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6067 #6067] || v.db.connect: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6075 #6075] || r.regression.multi: Add JSON support || July 18, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6077 #6077] || v.db.connect: Add JSON support || July 19, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6091 #6091] || g.findfile: Add JSON support || July 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6098 #6098] || r3.info: Add test file || July 22, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6103 #6103] || r3.info: Add JSON support || July 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6109 #6109] || v.what.rast: Add test file || July 24, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6132 #6132] || v.category: Use CSV format instead of shell format || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6133 #6133] || r.stats: add CSV support || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6134 #6134] || r.volume: add csv column headers || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6140 #6140] || v.what.rast: Add JSON support || July 29, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6145 #6145] || r.profile: Add CSV support || July 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6150 #6150] || r.distance: Update existing test cases || August 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6204 #6204] || r.distance: Add JSON and CSV support || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6205 #6205] || v.class: Add more test cases and fix out-of-bounds bug || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6210 #6210] || v.class: Add JSON and CSV support || August 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6252 #6252] || v.what: Update JSON output format || August 23, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Additional Links ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Ttile&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| OSGeo Wiki Page&lt;br /&gt;
| [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C Add JSON output to different tools in C for GRASS]&lt;br /&gt;
|-&lt;br /&gt;
| Github Fork&lt;br /&gt;
| [https://github.com/NishantBansal2003/grass GitHub Fork]&lt;br /&gt;
|-&lt;br /&gt;
| GSoC Page&lt;br /&gt;
| [https://summerofcode.withgoogle.com/programs/2025/projects/GPVGd3DH Link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples &amp;amp; Images ==&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; JSON output in Python ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; can be directly loaded into a pandas DataFrame and used for plotting with matplotlib.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
# Run r.profile command&lt;br /&gt;
elevation = gs.read_command(&lt;br /&gt;
    &amp;quot;r.profile&amp;quot;,&lt;br /&gt;
    input=&amp;quot;elevation&amp;quot;,&lt;br /&gt;
    coordinates=&amp;quot;641712,226095,641546,224138,641546,222048,641049,221186&amp;quot;,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
    flags=&amp;quot;gc&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Load the JSON data into a dataframe&lt;br /&gt;
df = pd.read_json(elevation)&lt;br /&gt;
print(df)&lt;br /&gt;
&lt;br /&gt;
# Create the scatter plot&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
plt.scatter(df[&amp;quot;distance&amp;quot;], df[&amp;quot;value&amp;quot;], c=df[&amp;quot;color&amp;quot;], marker=&amp;quot;o&amp;quot;)&lt;br /&gt;
plt.title(&amp;quot;Profile of Distance vs. Elevation with Color Coding&amp;quot;)&lt;br /&gt;
plt.xlabel(&amp;quot;Distance (meters)&amp;quot;)&lt;br /&gt;
plt.ylabel(&amp;quot;Elevation&amp;quot;)&lt;br /&gt;
plt.grid(True)&lt;br /&gt;
plt.show()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame Output (first 10 rows) ====  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
         easting       northing   distance      value    color&lt;br /&gt;
0  641712.000000  226095.000000   0.000000  84.661507  #71FF00&lt;br /&gt;
1  641711.154826  226085.036106   9.999675  84.511765  #6FFF00&lt;br /&gt;
2  641710.309651  226075.072213  19.999349  84.241806  #6BFF00&lt;br /&gt;
3  641709.464477  226065.108319  29.999024  84.304214  #6CFF00&lt;br /&gt;
4  641708.619302  226055.144426  39.998699  84.174400  #6AFF00&lt;br /&gt;
5  641707.774128  226045.180532  49.998374  84.112534  #6AFF00&lt;br /&gt;
6  641706.928954  226035.216639  59.998048  84.011208  #68FF00&lt;br /&gt;
7  641706.083779  226025.252745  69.997723  83.834084  #66FF00&lt;br /&gt;
8  641705.238605  226015.288851  79.997398  83.870193  #67FF00&lt;br /&gt;
9  641704.393430  226005.324958  89.997073  84.194908  #6BFF00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Visualization ====  &lt;br /&gt;
&lt;br /&gt;
Matplotlib scatter plot generated from the &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; JSON output: &lt;br /&gt;
&lt;br /&gt;
[[File:R profile plot.png]]&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt; can be directly loaded into a pandas DataFrame.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.class&amp;quot;,&lt;br /&gt;
    map=&amp;quot;bridges&amp;quot;,&lt;br /&gt;
    column=&amp;quot;YEAR_BUILT&amp;quot;,&lt;br /&gt;
    algorithm=&amp;quot;std&amp;quot;,&lt;br /&gt;
    nbclasses=5,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data[&amp;quot;intervals&amp;quot;])&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output (intervals) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
          from           to  frequency&lt;br /&gt;
0  1891.000000  1938.829689        750&lt;br /&gt;
1  1938.829689  1954.722836       1841&lt;br /&gt;
2  1954.722836  1970.615983       5556&lt;br /&gt;
3  1970.615983  1986.509130       1788&lt;br /&gt;
4  1986.509130  1997.000000       1003&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame to display categories and values.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.what.rast&amp;quot;, map=&amp;quot;bridges&amp;quot;, raster=&amp;quot;elevation&amp;quot;, flags=&amp;quot;p&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    category       value&lt;br /&gt;
0       4635   86.851212&lt;br /&gt;
1       4648   87.883255&lt;br /&gt;
2       4688  103.382004&lt;br /&gt;
3       4709   67.387856&lt;br /&gt;
4       4986   90.972832&lt;br /&gt;
5       4991   86.550629&lt;br /&gt;
6       5027   84.256355&lt;br /&gt;
7       5060   79.500443&lt;br /&gt;
8       5071   78.732864&lt;br /&gt;
9       5089   85.703636&lt;br /&gt;
10      5096  115.967323&lt;br /&gt;
11      5130   81.055870&lt;br /&gt;
12      5150   92.812927&lt;br /&gt;
13      5166   88.149483&lt;br /&gt;
14      5184   76.426331&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame to locate closest points.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
&lt;br /&gt;
result = gs.parse_command(&lt;br /&gt;
    &amp;quot;r.distance&amp;quot;, map=[&amp;quot;zipcodes&amp;quot;, &amp;quot;lakes&amp;quot;], flags=&amp;quot;l&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
df = pd.json_normalize(result)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output (first 10 rows, truncated) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
       distance  from_cell.category  from_cell.easting  ...  to_cell.easting to_cell.northing  to_cell.label&lt;br /&gt;
0  11158.507466               27511      632604.951740  ...    640584.676990    215499.220687       Dam/Weir&lt;br /&gt;
1   1037.271198               27511      631734.981693  ...    632314.961724    221839.026534      Lake/Pond&lt;br /&gt;
2   2276.988836               27511      630015.040913  ...    630765.015090    219459.099418      Reservoir&lt;br /&gt;
3  14614.155031               27513      631055.005106  ...    640584.676990    215499.220687       Dam/Weir&lt;br /&gt;
4   3635.876453               27513      631674.983759  ...    635164.863600    227198.862392      Lake/Pond&lt;br /&gt;
5   6971.335517               27513      630005.041257  ...    630765.015090    219459.099418      Reservoir&lt;br /&gt;
6   8978.927486               27518      632134.967922  ...    640424.682499    215209.229568       Dam/Weir&lt;br /&gt;
7      0.000000               27518      630005.041257  ...    630005.041257    220199.076757      Lake/Pond&lt;br /&gt;
8    699.975899               27518      630005.041257  ...    630705.017156    219379.101868      Reservoir&lt;br /&gt;
9    509.197766               27529      641154.657366  ...    640674.673892    215249.228343       Dam/Weir&lt;br /&gt;
&lt;br /&gt;
[10 rows x 9 columns]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.distance&amp;quot;,&lt;br /&gt;
    flags=&amp;quot;p&amp;quot;,&lt;br /&gt;
    from_=&amp;quot;busroute_a&amp;quot;,&lt;br /&gt;
    to=&amp;quot;busstopsall&amp;quot;,&lt;br /&gt;
    upload=&amp;quot;dist,to_attr&amp;quot;,&lt;br /&gt;
    to_column=&amp;quot;routes&amp;quot;,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
   from_cat  to_cat      dist to_attr&lt;br /&gt;
0         1     112  0.142812     8,A&lt;br /&gt;
1         2      44  0.102327     9,A&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;r.volume&amp;quot;, input=&amp;quot;elevation&amp;quot;, clump=&amp;quot;geology_30m&amp;quot;, flags=&amp;quot;p&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    category  average         sum   cells        volume  easting  northing&lt;br /&gt;
0        217   118.93 86288827.99  725562 8628882798.63   635325    221535&lt;br /&gt;
1        262   108.97 21650560.37  198684 2165056037.02   638935    222495&lt;br /&gt;
2        270    92.23 63578874.44  689373 6357887443.53   642405    221485&lt;br /&gt;
3        405   132.96 33732662.09  253710 3373266208.59   631835    224095&lt;br /&gt;
4        583   139.35  3011288.22   21609  301128821.55   630205    224665&lt;br /&gt;
5        720   124.30   599618.16    4824   59961816.06   634075    227995&lt;br /&gt;
6        766   132.43   936791.20    7074   93679120.08   631425    227845&lt;br /&gt;
7        862   118.31  7302317.47   61722  730231746.74   630505    218885&lt;br /&gt;
8        910    94.20  4235816.13   44964  423581613.11   639215    216365&lt;br /&gt;
9        921   135.22  1693985.23   12528  169398523.05   630755    215445&lt;br /&gt;
10       945   127.24     1145.12       9     114512.03   630015    215015&lt;br /&gt;
11       946    89.91   365748.34    4068   36574833.85   639085    215255&lt;br /&gt;
12       948   129.02   112631.82     873   11263181.57   630185    215115&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{GSoC}}&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28672</id>
		<title>GRASS GSoC 2025 Add JSON output to different tools in C</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28672"/>
		<updated>2025-08-24T07:30:47Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: /* Examples &amp;amp; Images */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Nishant Bansal&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo - Open Source Geospatial Foundation]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/NishantBansal2003/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''GSoC proposal''' || [https://docs.google.com/document/d/1ZPQ9RXU7b_RUDmBmAMeK7ZjFAV1WC7Urd1Zlz678jyw/edit?tab=t.0#heading=h.z6ne0og04bp5 View Proposal]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Abstract =&lt;br /&gt;
Currently, most GRASS tools produce data in plain text by default. This means that users who want to process the output in Python need to create custom parsing code. To make this easier, several modules could be improved by oﬀering JSON as an alternative output format. Recently, the Parson library was added to the GRASS codebase to support JSON output in addition to plain text. Building on the advancements made during the last GSoC, my project aims to expand JSON output capabilities to more tools using the Parson library. I will also work on making the JSON structure introduced in the previous GSoC more useful and consistent. Additionally, I plan to add support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
&lt;br /&gt;
# Working with mentors to finalize the structure of the JSON output.&lt;br /&gt;
# Adding an option to choose the output format (plain text or JSON) for each updated tool.&lt;br /&gt;
# Make the JSON structure introduced during the last GSoC more useful and consistent across tools.&lt;br /&gt;
# Developing Python test cases to ensure that the JSON output works correctly and to avoid future issues.&lt;br /&gt;
# Providing basic documentation and example JSON outputs for each modified tool.&lt;br /&gt;
# Adding support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
# Develop simple examples demonstrating how to use JSON output in a data science workflow, such as reading JSON data into pandas or python.&lt;br /&gt;
&lt;br /&gt;
= Timeline =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Period !! Timeline  !! Tasks   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period &lt;br /&gt;
||&lt;br /&gt;
May 8 - June 1  &lt;br /&gt;
|| &lt;br /&gt;
# Reviewed the work done during the last GSoC to stabilize the JSON output.&lt;br /&gt;
# Discussed the priority tools for adding JSON support.&lt;br /&gt;
# Read GRASS documentation to add Python and JSON examples to the documentation.&lt;br /&gt;
|| &lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;13&amp;quot; | Official Coding Period &lt;br /&gt;
|-&lt;br /&gt;
| '''Week 1''' (June 2 - June 8) || &lt;br /&gt;
# Add JSON support for g.mapset [https://github.com/OSGeo/grass/pull/5810 #5810]&lt;br /&gt;
# Fix uninitialized zone_value in r.univar [https://github.com/OSGeo/grass/pull/5821 #5821]&lt;br /&gt;
# Add JSON support for r.what.color [https://github.com/OSGeo/grass/pull/5822 #5822]&lt;br /&gt;
# Update test file in r.info [https://github.com/OSGeo/grass/pull/5842 #5842]&lt;br /&gt;
# Improve interface for r.info [https://github.com/OSGeo/grass/pull/5859 #5859]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 2''' (June 9 - June 15) ||&lt;br /&gt;
# Add JSON support for g.version [https://github.com/OSGeo/grass/pull/5863 #5863]&lt;br /&gt;
# Add JSON support for i.group [https://github.com/OSGeo/grass/pull/5870 #5870]&lt;br /&gt;
# Add test file in r.stats [https://github.com/OSGeo/grass/pull/5879 #5879]&lt;br /&gt;
# Add tests for JSON output in r.stats [https://github.com/OSGeo/grass/pull/5892 #5892]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 3''' (June 16 - June 22) ||&lt;br /&gt;
# Update the JSON output schema of v.distance [https://github.com/OSGeo/grass/pull/5898 #5898]&lt;br /&gt;
# Fix uninitialized window variable in r.stats [https://github.com/OSGeo/grass/pull/5900 #5900]&lt;br /&gt;
# Add test file in g.list [https://github.com/OSGeo/grass/pull/5906 #5906]&lt;br /&gt;
# Add JSON support for g.list [https://github.com/OSGeo/grass/pull/5921 #5921]&lt;br /&gt;
# Update the JSON output schema of g.region [https://github.com/OSGeo/grass/pull/5929 #5929]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 4''' (June 23 - June 29) ||&lt;br /&gt;
# Update the JSON output schema of v.to.db [https://github.com/OSGeo/grass/pull/5946 #5946]&lt;br /&gt;
# Update the JSON output schema of r.profile [https://github.com/OSGeo/grass/pull/5962 #5962]&lt;br /&gt;
# Add SHELL and CSV output support for r.univar [https://github.com/OSGeo/grass/pull/5966 #5966]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 5''' (June 30 - July 6) ||&lt;br /&gt;
# Add test file in r.regression.line [https://github.com/OSGeo/grass/pull/5990 #5990]&lt;br /&gt;
# Add JSON support for r.regression.line [https://github.com/OSGeo/grass/pull/5993 #5993]&lt;br /&gt;
# Add test file in r.stats.quantile [https://github.com/OSGeo/grass/pull/6002 #6002]&lt;br /&gt;
# Add JSON support for r.stats.quantile [https://github.com/OSGeo/grass/pull/6007 #6007]&lt;br /&gt;
# Add test file in r.volume [https://github.com/OSGeo/grass/pull/6027 #6027]&lt;br /&gt;
# Add JSON support for r.volume [https://github.com/OSGeo/grass/pull/6036 #6036]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 6''' (July 7 - July 13) ||&lt;br /&gt;
# Add JSON support for db.columns [https://github.com/OSGeo/grass/pull/6042 #6042]&lt;br /&gt;
# Add test file in m.measure [https://github.com/OSGeo/grass/pull/6051 #6051]&lt;br /&gt;
# Add test file in db.connect [https://github.com/OSGeo/grass/pull/6052 #6052]&lt;br /&gt;
# Add JSON support for m.measure [https://github.com/OSGeo/grass/pull/6053 #6053]&lt;br /&gt;
# Add JSON support for db.connect [https://github.com/OSGeo/grass/pull/6059 #6059]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | '''Week 7''' (July 14 - July 20) ||&lt;br /&gt;
# Add test file in r.regression.multi [https://github.com/OSGeo/grass/pull/6066 #6066]&lt;br /&gt;
# Add test file in v.db.connect [https://github.com/OSGeo/grass/pull/6067 #6067]&lt;br /&gt;
# Add JSON support for r.regression.multi [https://github.com/OSGeo/grass/pull/6075 #6075]&lt;br /&gt;
# Add JSON support for v.db.connect [https://github.com/OSGeo/grass/pull/6077 #6077]&lt;br /&gt;
# Submit MidTerm evaluation.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 8''' (July 21 - July 27) ||&lt;br /&gt;
# Add JSON support for g.findfile [https://github.com/OSGeo/grass/pull/6091 #6091]&lt;br /&gt;
# Add test file in r3.info [https://github.com/OSGeo/grass/pull/6098 #6098]&lt;br /&gt;
# Add JSON support for r3.info [https://github.com/OSGeo/grass/pull/6103 #6103]&lt;br /&gt;
# Add test file in v.what.rast [https://github.com/OSGeo/grass/pull/6109 #6109]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 9''' (July 28 - August 3) ||&lt;br /&gt;
# Update format to CSV instead of shell in v.category [https://github.com/OSGeo/grass/pull/6132 #6132]&lt;br /&gt;
# Add CSV output support to r.stats [https://github.com/OSGeo/grass/pull/6133 #6133]&lt;br /&gt;
# Add CSV headers to r.volume [https://github.com/OSGeo/grass/pull/6134 #6134]&lt;br /&gt;
# Add JSON support for v.what.rast [https://github.com/OSGeo/grass/pull/6140 #6140]&lt;br /&gt;
# Add CSV output support to r.profile [https://github.com/OSGeo/grass/pull/6145 #6145]&lt;br /&gt;
# Update test cases in r.distance [https://github.com/OSGeo/grass/pull/6150 #6150]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 10''' (August 4 - August 10) ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 11''' (August 11 - August 17) ||&lt;br /&gt;
# Add JSON and CSV support for r.distance [https://github.com/OSGeo/grass/pull/6204 #6204]&lt;br /&gt;
# Add more test cases in v.class [https://github.com/OSGeo/grass/pull/6205 #6205]&lt;br /&gt;
# Add JSON and CSV support for v.class [https://github.com/OSGeo/grass/pull/6210 #6210]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 12''' (August 18 - August 24) ||&lt;br /&gt;
# Update JSON output format for v.what [https://github.com/OSGeo/grass/pull/6252 #6252]&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Evaluation Period &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | August 25 - September 1 ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
# Submit code, final evaluation and write the final GSoC report.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Reports =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* Introduced myself on the [https://discourse.osgeo.org/t/gsoc-2025-introduction-nishant-bansal/147005 OSGeo Discourse mailing list].&lt;br /&gt;
* Created both my [https://wiki.osgeo.org/wiki/User:Nishantbansal2003 personal Wiki page] and the [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C project Wiki page], adding all necessary project-related information.&lt;br /&gt;
* Read GRASS documentation to support the addition of Python and JSON examples.&lt;br /&gt;
* Worked on the following pull requests:&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5688 #5688]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5773 #5773]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5775 #5775]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5784 #5784]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5785 #5785]&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to the g.mapset and r.what.color modules.&lt;br /&gt;
* If time permits, I will begin improving the r.info interface: [https://github.com/OSGeo/grass/issues/5793 Issue #5793]&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
'''Project Discussions and Meetings'''&lt;br /&gt;
* '''14 May 2025''': Introductory meeting discussing JSON support and overall project milestones.&lt;br /&gt;
* '''21 May 2025''': Introduction with fellow developers. Discussed priority tools, adding Python/Pandas examples, and approaches for finalizing the JSON schema for each module.&lt;br /&gt;
&lt;br /&gt;
== Week-1 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.mapset''': Added JSON output support, now you can use -p and -l flags to get JSON-formatted results.&lt;br /&gt;
* '''r.univar''': Fixed a bug causing an uninitialized zone_value.&lt;br /&gt;
* '''r.what.color''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5822 #5822])&lt;br /&gt;
* '''r.info (regression tests)''': To maintain backward compatibility while updating its interface, I added strong regression tests.&lt;br /&gt;
* '''r.info (interface improvements)''': Began improving the module’s interface. (See PR [https://github.com/OSGeo/grass/pull/5859 #5859])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.version (see issue [https://github.com/OSGeo/grass/issues/5816 #5816]).&lt;br /&gt;
* Add JSON output support to i.group (see issue [https://github.com/OSGeo/grass/issues/5815 #5815]).&lt;br /&gt;
* If time permits, write tests for r.stats (see issue [https://github.com/OSGeo/grass/issues/5814 #5814]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-2 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.version''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5863 #5863])&lt;br /&gt;
* '''i.group''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5870 #5870])&lt;br /&gt;
* '''r.stats (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats''': Added tests for JSON output; this uncovered a bug, which was fixed alongside.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.distance (see issue [https://github.com/OSGeo/grass/issues/5846 #5846]).&lt;br /&gt;
* Add JSON output support to g.list (see issue [https://github.com/OSGeo/grass/issues/5848 #5848]).&lt;br /&gt;
* If time permits, fix the JSON output format of g.region (see issue [https://github.com/OSGeo/grass/issues/5828 #5828]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-3 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.distance''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5898 #5898])&lt;br /&gt;
* '''r.stats''': Fixed a bug causing an uninitialized &amp;lt;code&amp;gt;window&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
* '''g.list (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''g.list''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5921 #5921])&lt;br /&gt;
* '''g.region''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5929 #5929])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.to.db (see issue [https://github.com/OSGeo/grass/pull/5711 #5711]).&lt;br /&gt;
* Update JSON output format and documentation of r.profile (see issue [https://github.com/OSGeo/grass/pull/5834 #5834]).&lt;br /&gt;
* If time permits, add shell and csv output formats to r.univar (see issue [https://github.com/OSGeo/grass/pull/5824 #5824]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-4 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.to.db''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5946 #5946])&lt;br /&gt;
* '''r.profile''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5962 #5962])&lt;br /&gt;
* '''r.univar''': Implemented SHELL and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/5966 #5966])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.regression.line (see issue [https://github.com/OSGeo/grass/pull/5950 #5950]).&lt;br /&gt;
* Add JSON output support to r.stats.quantile (see issue [https://github.com/OSGeo/grass/pull/5951 #5951]).&lt;br /&gt;
* Add JSON output support to r.volume (see issue [https://github.com/OSGeo/grass/pull/5949 #5949]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-5 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.line (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.line''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5993 #5993])&lt;br /&gt;
* '''r.stats.quantile (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats.quantile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6007 #6007])&lt;br /&gt;
* '''r.volume (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.volume''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6036 #6036])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to m.measure (see issue [https://github.com/OSGeo/grass/pull/6006 #6006]).&lt;br /&gt;
* Add JSON output support to db.columns (see issue [https://github.com/OSGeo/grass/pull/6008 #6008]).&lt;br /&gt;
* Add JSON output support to db.connect (see issue [https://github.com/OSGeo/grass/pull/6009 #6009]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-6 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''db.columns''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6042 #6042])&lt;br /&gt;
* '''m.measure (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''m.measure''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6053 #6053])&lt;br /&gt;
* '''db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6059 #6059])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to v.db.connect (see issue [https://github.com/OSGeo/grass/pull/6014 #6014]).&lt;br /&gt;
* Add JSON output support to r.regression.multi (see issue [https://github.com/OSGeo/grass/pull/6010 #6010]).&lt;br /&gt;
* If time permits, add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* If time permits, add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-7 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.multi (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''v.db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.multi''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6075 #6075])&lt;br /&gt;
* '''v.db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6077 #6077])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* Add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
* If time permits, add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-8 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.findfile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6091 #6091])&lt;br /&gt;
* '''r3.info (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a flag-handling bug.&lt;br /&gt;
* '''r3.info''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6103 #6103])&lt;br /&gt;
* '''v.what.rast (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a sorting bug.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
* Update format to CSV instead of shell in v.category (see issue [https://github.com/OSGeo/grass/pull/6025 #6025]).&lt;br /&gt;
* Add CSV output support to r.stats (see issue [https://github.com/OSGeo/grass/issues/5835 #5835]).&lt;br /&gt;
* If time permits, add CSV output support to r.profile (see issue [https://github.com/OSGeo/grass/issues/5958 #5958]).&lt;br /&gt;
* If time permits, add CSV headers to r.volume (see issue [https://github.com/OSGeo/grass/issues/6049 #6049]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I don’t have any blockers this week. However, I’ll be a little busy with some personal work from August 3 to August 10, so I’ll try to complete next week’s tasks this week itself.&lt;br /&gt;
&lt;br /&gt;
== Week-9 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.category''': Updated format to CSV instead of shell. (See PR [https://github.com/OSGeo/grass/pull/6132 #6132])&lt;br /&gt;
* '''r.stats''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6133 #6133])&lt;br /&gt;
* '''r.volume''': Implemented CSV column headers support. (See PR [https://github.com/OSGeo/grass/pull/6134 #6134])&lt;br /&gt;
* '''v.what.rast''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6140 #6140])&lt;br /&gt;
* '''r.profile''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6145 #6145])&lt;br /&gt;
* '''r.distance (regression tests)''': Updated regression tests to ensure backward compatibility with new JSON support. (See PR [https://github.com/OSGeo/grass/pull/6150 #6150])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* I’ll be a bit busy with some personal work from August 3 to 10, so I completed next week’s tasks last week itself. I’ve already informed my mentors about my limited availability.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* Yes, I’ll be a bit busy with some personal work from August 3 to 10.&lt;br /&gt;
&lt;br /&gt;
== Week-10 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* This week I was busy with some personal work, so I did not complete any additional tasks. However, I had already finished this week’s tasks last week. This week, I mostly focused on handling reviews for those PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.distance (see issue [https://github.com/OSGeo/grass/issues/6135 #6135]).&lt;br /&gt;
* Add JSON output support to v.class (see issue [https://github.com/OSGeo/grass/issues/6136 #6136]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-11 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.distance''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6204 #6204])&lt;br /&gt;
* '''v.class''': Updated regression tests to ensure backward compatibility with new JSON support and fixed a out-of-bounds bug. (See PR [https://github.com/OSGeo/grass/pull/6205 #6205])&lt;br /&gt;
* '''v.class''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6210 #6210])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Discuss next week’s tasks with my mentors, if no issues are assigned, I’ll identify tools that currently lack JSON support and evaluate which ones are feasible to add it to.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-12 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.what''': Update JSON output format. (See PR [https://github.com/OSGeo/grass/pull/6252 #6252])&lt;br /&gt;
* Addressed review comments on my open PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
= Final Report =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Title''' || Add JSON output to different tools in C for GRASS&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo (Open Source Geospatial Foundation)]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''Program''' || Google Summer of Code 2025&lt;br /&gt;
|-&lt;br /&gt;
| '''Contributions''' || [https://github.com/OSGeo/grass/pulls?q=is%3Apr+author%3ANishantBansal2003+ Pull Requests]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
During my GSoC project, I addressed the challenge that most GRASS tools produced only plain text output, forcing users to write custom parsing code for Python-based workflows. The task was to make these tools more data-science friendly by adding structured output formats. To achieve this, I extended the use of the Parson library to implement consistent JSON output across multiple modules, refined the JSON structure introduced in the previous GSoC, and added optional support for SHELL and CSV outputs where appropriate. I developed comprehensive Python test cases, ensured backward compatibility, and provided documentation with practical examples such as loading JSON into pandas. As a result, GRASS users can now directly consume structured outputs in modern workflows, reducing parsing overhead, improving interoperability, and paving the way for broader adoption of GRASS in data science contexts.&lt;br /&gt;
&lt;br /&gt;
== The state of integration BEFORE the start of GSoC ==&lt;br /&gt;
Before the start of GSoC, the integration of GRASS with data science workflows was limited due to several challenges. The JSON outputs introduced in the previous GSoC contained deeply nested hierarchies, making them difficult to use directly with libraries such as '''pandas''' or in broader data science pipelines. While some tools already supported JSON (e.g., &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;), many important and highly demanded modules lacked JSON support, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt; and many more. This lack of consistency limited the seamless adoption of GRASS in analytics and machine learning contexts. Moreover, there was no clear '''documentation of the JSON schema''' or guidance on how to parse and utilize these outputs effectively in '''python or pandas''', which made it difficult for users to understand the use cases and integrate GRASS outputs into modern data science workflows.&lt;br /&gt;
&lt;br /&gt;
== The state of integration AFTER GSoC ==&lt;br /&gt;
&lt;br /&gt;
After GSoC, the integration state of JSON and alternative output formats in GRASS has significantly improved. I refactored the JSON structures for tools such as &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;, and others, removing unnecessary nesting introduced during the previous GSoC. This makes their outputs much easier to consume directly in &amp;lt;b&amp;gt;Python&amp;lt;/b&amp;gt; or with &amp;lt;b&amp;gt;pandas&amp;lt;/b&amp;gt;. In addition, JSON support has been extended to many essential and frequently used modules, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;, and many more. I also added detailed documentation of the JSON schema and provided examples showing how to parse and use these outputs effectively with Python and pandas. Together, these improvements make the adoption of GRASS in modern &amp;lt;b&amp;gt;data science workflows&amp;lt;/b&amp;gt; far more seamless and accessible.&lt;br /&gt;
&lt;br /&gt;
=== Enhancements made per tool ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;: Simplified JSON structure for univariate statistics, removed unnecessary hierarchy, and added new output format options (CSV, shell).&lt;br /&gt;
* &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;: Added JSON support for querying raster map colors, with a Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;: Added JSON support for reporting the current mapset, with a Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;: Updated JSON structure for raster map metadata, removing hierarchy for easier parsing. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;: Simplified JSON output for geographic region boundaries, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;: Added JSON support for GRASS version information, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;: Added JSON support for listing imagery groups, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;: Added JSON and CSV support for raster area statistics, with Python and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;: Refined JSON schema for nearest element queries, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;: Added JSON support for listing GRASS database files, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;: Updated JSON schema for printing vector attribute values, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;: Simplified JSON output, added CSV support, and included a matplotlib example for profile visualization.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;: Updated JSON schema for linear regression between rasters, with Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;: Updated JSON schema for category quantiles, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;: Added JSON support for raster volume calculations, fixed missing headers in CSV output, and provided pandas examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.columns&amp;lt;/code&amp;gt;: Added JSON output for listing database table columns, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;: Added JSON output for measuring lengths and areas, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.connect&amp;lt;/code&amp;gt;: Added JSON output for DB connection info, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.multi&amp;lt;/code&amp;gt;: Added JSON output for multiple regression between rasters, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.db.connect&amp;lt;/code&amp;gt;: Added JSON output for vector map attribute connections, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.findfile&amp;lt;/code&amp;gt;: Added JSON output for GRASS database file search, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;: Added JSON output for 3D raster map info, with Python example. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;: Added JSON output for extracting raster values at vector points, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt;: Added JSON and CSV support for locating closest points between raster objects, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;: Added JSON and CSV support for attribute data, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;: Migrated from manually written JSON to Parson-based JSON output, simplified schema, and provided Python parsing examples.&lt;br /&gt;
&lt;br /&gt;
All these changes were accompanied by regression tests to ensure that new JSON/CSV/SHELL/PLAIN output options do not break existing functionality. Additionally, I introduced comprehensive Python test cases for these outputs, making the enhancements reliable and future-proof. During this work, I also fixed several bugs in modules such as &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;, strengthening the stability of GRASS as a whole.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
To sum up, I’m glad to have met the three core objectives of my project with the constant support of my mentors:&lt;br /&gt;
&lt;br /&gt;
* Brought JSON output to several important and long-requested modules, added regression tests, and ensured reliable future test coverage.&lt;br /&gt;
* Enhanced the JSON schema introduced in last year’s GSoC by reducing unnecessary hierarchy, making it more consistent across tools, and providing Python/Pandas examples for practical use.&lt;br /&gt;
* Expanded &amp;lt;b&amp;gt;CSV&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;SHELL&amp;lt;/b&amp;gt; output formats to additional tools where they could bring value.&lt;br /&gt;
&lt;br /&gt;
This journey has been both rewarding and educational, and I’m grateful for the opportunity to contribute to GRASS through GSoC 2025. I especially want to thank &amp;lt;b&amp;gt;Anna Petrasova&amp;lt;/b&amp;gt; and the GRASS Development Team for their guidance and support. I’m excited to keep building on this work and further extend JSON and other features in the future.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
There is significant scope to extend structured output support across GRASS tools. In particular, future efforts should focus on:&lt;br /&gt;
* Expanding JSON output to additional modules, with details tracked here: [https://github.com/orgs/OSGeo/projects/10 GRASS JSON Outputs Project].&lt;br /&gt;
* Refining and standardizing the JSON schema to better support complex workflows and integrations.&lt;br /&gt;
* Exploring and implementing other output formats (e.g., SHELL, CSV, PLAIN) where they can improve usability and automation.&lt;br /&gt;
I also plan to continue contributing to GRASS by extending JSON support to more modules and engaging in community discussions around schema design and format integration.&lt;br /&gt;
&lt;br /&gt;
== Log of Pull Requests ==&lt;br /&gt;
Below is a list of pull requests submitted to the GRASS repository during GSoC 2025:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pull Request !! Description  !! Date   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5688 #5688] || r.univar: Fix JSON structure || May 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5773 #5773] || r.what.color: Add test file || May 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5775 #5775] || g.mapset: Add test file || May 26, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5784 #5784] || r.info: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;Closed&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5785 #5785] || g.region: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5810 #5810] || g.mapset: Add JSON support || June 2, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5821 #5821] || r.univar: Fix uninitialized zone_value || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5822 #5822] || r.what.color: Add JSON support || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5842 #5842] || r.info: Update test file || June 5, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5859 #5859] || r.info: Improve interface || June 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5863 #5863] || g.version: Add JSON support || June 9, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5870 #5870] || i.group: Add JSON support || June 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5879 #5879] || r.stats: Add test file || June 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5892 #5892] || r.stats: Add tests for JSON output || June 14, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5898 #5898] || v.distance: Update JSON format || June 16, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5900 #5900] || r.stats: fix uninitialised window value || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5906 #5906] || g.list: Add test file || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5921 #5921] || g.list: Add JSON support || June 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5929 #5929] || g.region: Update JSON format || June 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5946 #5946] || v.to.db: Update JSON format || June 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5962 #5962] || r.profile: Update JSON format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5966 #5966] || r.univar: Add shell and CSV format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5990 #5990] || r.regression.line: Add test file || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5993 #5993] || r.regression.line: Add JSON support || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6002 #6002] || r.stats.quantile: Add test file || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6007 #6007] || r.stats.quantile: Add JSON support || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6027 #6027] || r.volume: Add test file || July 4, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6036 #6036] || r.volume: Add JSON support || July 6, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6042 #6042] || db.columns: Add JSON support || July 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6051 #6051] || m.measure: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6052 #6052] || db.connect: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6053 #6053] || m.measure: Add JSON support || July 11, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6059 #6059] || db.connect: Add JSON support || July 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6066 #6066] || r.regression.multi: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6067 #6067] || v.db.connect: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6075 #6075] || r.regression.multi: Add JSON support || July 18, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6077 #6077] || v.db.connect: Add JSON support || July 19, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6091 #6091] || g.findfile: Add JSON support || July 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6098 #6098] || r3.info: Add test file || July 22, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6103 #6103] || r3.info: Add JSON support || July 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6109 #6109] || v.what.rast: Add test file || July 24, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6132 #6132] || v.category: Use CSV format instead of shell format || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6133 #6133] || r.stats: add CSV support || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6134 #6134] || r.volume: add csv column headers || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6140 #6140] || v.what.rast: Add JSON support || July 29, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6145 #6145] || r.profile: Add CSV support || July 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6150 #6150] || r.distance: Update existing test cases || August 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6204 #6204] || r.distance: Add JSON and CSV support || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6205 #6205] || v.class: Add more test cases and fix out-of-bounds bug || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6210 #6210] || v.class: Add JSON and CSV support || August 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6252 #6252] || v.what: Update JSON output format || August 23, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Additional Links ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Ttile&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| OSGeo Wiki Page&lt;br /&gt;
| [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C Add JSON output to different tools in C for GRASS]&lt;br /&gt;
|-&lt;br /&gt;
| Github Fork&lt;br /&gt;
| [https://github.com/NishantBansal2003/grass GitHub Fork]&lt;br /&gt;
|-&lt;br /&gt;
| GSoC Page&lt;br /&gt;
| [https://summerofcode.withgoogle.com/programs/2025/projects/GPVGd3DH Link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples &amp;amp; Images ==&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; JSON output in Python ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; can be directly loaded into a pandas DataFrame and used for plotting with matplotlib.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
# Run r.profile command&lt;br /&gt;
elevation = gs.read_command(&lt;br /&gt;
    &amp;quot;r.profile&amp;quot;,&lt;br /&gt;
    input=&amp;quot;elevation&amp;quot;,&lt;br /&gt;
    coordinates=&amp;quot;641712,226095,641546,224138,641546,222048,641049,221186&amp;quot;,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
    flags=&amp;quot;gc&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Load the JSON data into a dataframe&lt;br /&gt;
df = pd.read_json(elevation)&lt;br /&gt;
print(df)&lt;br /&gt;
&lt;br /&gt;
# Create the scatter plot&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
plt.scatter(df[&amp;quot;distance&amp;quot;], df[&amp;quot;value&amp;quot;], c=df[&amp;quot;color&amp;quot;], marker=&amp;quot;o&amp;quot;)&lt;br /&gt;
plt.title(&amp;quot;Profile of Distance vs. Elevation with Color Coding&amp;quot;)&lt;br /&gt;
plt.xlabel(&amp;quot;Distance (meters)&amp;quot;)&lt;br /&gt;
plt.ylabel(&amp;quot;Elevation&amp;quot;)&lt;br /&gt;
plt.grid(True)&lt;br /&gt;
plt.show()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame Output (first 10 rows) ====  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
         easting       northing   distance      value    color&lt;br /&gt;
0  641712.000000  226095.000000   0.000000  84.661507  #71FF00&lt;br /&gt;
1  641711.154826  226085.036106   9.999675  84.511765  #6FFF00&lt;br /&gt;
2  641710.309651  226075.072213  19.999349  84.241806  #6BFF00&lt;br /&gt;
3  641709.464477  226065.108319  29.999024  84.304214  #6CFF00&lt;br /&gt;
4  641708.619302  226055.144426  39.998699  84.174400  #6AFF00&lt;br /&gt;
5  641707.774128  226045.180532  49.998374  84.112534  #6AFF00&lt;br /&gt;
6  641706.928954  226035.216639  59.998048  84.011208  #68FF00&lt;br /&gt;
7  641706.083779  226025.252745  69.997723  83.834084  #66FF00&lt;br /&gt;
8  641705.238605  226015.288851  79.997398  83.870193  #67FF00&lt;br /&gt;
9  641704.393430  226005.324958  89.997073  84.194908  #6BFF00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Visualization ====  &lt;br /&gt;
&lt;br /&gt;
Matplotlib scatter plot generated from the &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; JSON output: &lt;br /&gt;
&lt;br /&gt;
[[File:R profile plot.png]]&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt; can be directly loaded into a pandas DataFrame.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.class&amp;quot;,&lt;br /&gt;
    map=&amp;quot;bridges&amp;quot;,&lt;br /&gt;
    column=&amp;quot;YEAR_BUILT&amp;quot;,&lt;br /&gt;
    algorithm=&amp;quot;std&amp;quot;,&lt;br /&gt;
    nbclasses=5,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data[&amp;quot;intervals&amp;quot;])&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output (intervals) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
          from           to  frequency&lt;br /&gt;
0  1891.000000  1938.829689        750&lt;br /&gt;
1  1938.829689  1954.722836       1841&lt;br /&gt;
2  1954.722836  1970.615983       5556&lt;br /&gt;
3  1970.615983  1986.509130       1788&lt;br /&gt;
4  1986.509130  1997.000000       1003&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame to display categories and values.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.what.rast&amp;quot;, map=&amp;quot;bridges&amp;quot;, raster=&amp;quot;elevation&amp;quot;, flags=&amp;quot;p&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    category       value&lt;br /&gt;
0       4635   86.851212&lt;br /&gt;
1       4648   87.883255&lt;br /&gt;
2       4688  103.382004&lt;br /&gt;
3       4709   67.387856&lt;br /&gt;
4       4986   90.972832&lt;br /&gt;
5       4991   86.550629&lt;br /&gt;
6       5027   84.256355&lt;br /&gt;
7       5060   79.500443&lt;br /&gt;
8       5071   78.732864&lt;br /&gt;
9       5089   85.703636&lt;br /&gt;
10      5096  115.967323&lt;br /&gt;
11      5130   81.055870&lt;br /&gt;
12      5150   92.812927&lt;br /&gt;
13      5166   88.149483&lt;br /&gt;
14      5184   76.426331&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame to locate closest points.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
&lt;br /&gt;
result = gs.parse_command(&lt;br /&gt;
    &amp;quot;r.distance&amp;quot;, map=[&amp;quot;zipcodes&amp;quot;, &amp;quot;lakes&amp;quot;], flags=&amp;quot;l&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
df = pd.json_normalize(result)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output (first 10 rows, truncated) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
       distance  from_cell.category  from_cell.easting  ...  to_cell.easting to_cell.northing  to_cell.label&lt;br /&gt;
0  11158.507466               27511      632604.951740  ...    640584.676990    215499.220687       Dam/Weir&lt;br /&gt;
1   1037.271198               27511      631734.981693  ...    632314.961724    221839.026534      Lake/Pond&lt;br /&gt;
2   2276.988836               27511      630015.040913  ...    630765.015090    219459.099418      Reservoir&lt;br /&gt;
3  14614.155031               27513      631055.005106  ...    640584.676990    215499.220687       Dam/Weir&lt;br /&gt;
4   3635.876453               27513      631674.983759  ...    635164.863600    227198.862392      Lake/Pond&lt;br /&gt;
5   6971.335517               27513      630005.041257  ...    630765.015090    219459.099418      Reservoir&lt;br /&gt;
6   8978.927486               27518      632134.967922  ...    640424.682499    215209.229568       Dam/Weir&lt;br /&gt;
7      0.000000               27518      630005.041257  ...    630005.041257    220199.076757      Lake/Pond&lt;br /&gt;
8    699.975899               27518      630005.041257  ...    630705.017156    219379.101868      Reservoir&lt;br /&gt;
9    509.197766               27529      641154.657366  ...    640674.673892    215249.228343       Dam/Weir&lt;br /&gt;
&lt;br /&gt;
[10 rows x 9 columns]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.distance&amp;quot;,&lt;br /&gt;
    flags=&amp;quot;p&amp;quot;,&lt;br /&gt;
    from_=&amp;quot;busroute_a&amp;quot;,&lt;br /&gt;
    to=&amp;quot;busstopsall&amp;quot;,&lt;br /&gt;
    upload=&amp;quot;dist,to_attr&amp;quot;,&lt;br /&gt;
    to_column=&amp;quot;routes&amp;quot;,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
   from_cat  to_cat      dist to_attr&lt;br /&gt;
0         1     112  0.142812     8,A&lt;br /&gt;
1         2      44  0.102327     9,A&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{GSoC}}&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28671</id>
		<title>GRASS GSoC 2025 Add JSON output to different tools in C</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28671"/>
		<updated>2025-08-24T07:28:11Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: /* Sample DataFrame output (truncated) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Nishant Bansal&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo - Open Source Geospatial Foundation]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/NishantBansal2003/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''GSoC proposal''' || [https://docs.google.com/document/d/1ZPQ9RXU7b_RUDmBmAMeK7ZjFAV1WC7Urd1Zlz678jyw/edit?tab=t.0#heading=h.z6ne0og04bp5 View Proposal]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Abstract =&lt;br /&gt;
Currently, most GRASS tools produce data in plain text by default. This means that users who want to process the output in Python need to create custom parsing code. To make this easier, several modules could be improved by oﬀering JSON as an alternative output format. Recently, the Parson library was added to the GRASS codebase to support JSON output in addition to plain text. Building on the advancements made during the last GSoC, my project aims to expand JSON output capabilities to more tools using the Parson library. I will also work on making the JSON structure introduced in the previous GSoC more useful and consistent. Additionally, I plan to add support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
&lt;br /&gt;
# Working with mentors to finalize the structure of the JSON output.&lt;br /&gt;
# Adding an option to choose the output format (plain text or JSON) for each updated tool.&lt;br /&gt;
# Make the JSON structure introduced during the last GSoC more useful and consistent across tools.&lt;br /&gt;
# Developing Python test cases to ensure that the JSON output works correctly and to avoid future issues.&lt;br /&gt;
# Providing basic documentation and example JSON outputs for each modified tool.&lt;br /&gt;
# Adding support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
# Develop simple examples demonstrating how to use JSON output in a data science workflow, such as reading JSON data into pandas or python.&lt;br /&gt;
&lt;br /&gt;
= Timeline =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Period !! Timeline  !! Tasks   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period &lt;br /&gt;
||&lt;br /&gt;
May 8 - June 1  &lt;br /&gt;
|| &lt;br /&gt;
# Reviewed the work done during the last GSoC to stabilize the JSON output.&lt;br /&gt;
# Discussed the priority tools for adding JSON support.&lt;br /&gt;
# Read GRASS documentation to add Python and JSON examples to the documentation.&lt;br /&gt;
|| &lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;13&amp;quot; | Official Coding Period &lt;br /&gt;
|-&lt;br /&gt;
| '''Week 1''' (June 2 - June 8) || &lt;br /&gt;
# Add JSON support for g.mapset [https://github.com/OSGeo/grass/pull/5810 #5810]&lt;br /&gt;
# Fix uninitialized zone_value in r.univar [https://github.com/OSGeo/grass/pull/5821 #5821]&lt;br /&gt;
# Add JSON support for r.what.color [https://github.com/OSGeo/grass/pull/5822 #5822]&lt;br /&gt;
# Update test file in r.info [https://github.com/OSGeo/grass/pull/5842 #5842]&lt;br /&gt;
# Improve interface for r.info [https://github.com/OSGeo/grass/pull/5859 #5859]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 2''' (June 9 - June 15) ||&lt;br /&gt;
# Add JSON support for g.version [https://github.com/OSGeo/grass/pull/5863 #5863]&lt;br /&gt;
# Add JSON support for i.group [https://github.com/OSGeo/grass/pull/5870 #5870]&lt;br /&gt;
# Add test file in r.stats [https://github.com/OSGeo/grass/pull/5879 #5879]&lt;br /&gt;
# Add tests for JSON output in r.stats [https://github.com/OSGeo/grass/pull/5892 #5892]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 3''' (June 16 - June 22) ||&lt;br /&gt;
# Update the JSON output schema of v.distance [https://github.com/OSGeo/grass/pull/5898 #5898]&lt;br /&gt;
# Fix uninitialized window variable in r.stats [https://github.com/OSGeo/grass/pull/5900 #5900]&lt;br /&gt;
# Add test file in g.list [https://github.com/OSGeo/grass/pull/5906 #5906]&lt;br /&gt;
# Add JSON support for g.list [https://github.com/OSGeo/grass/pull/5921 #5921]&lt;br /&gt;
# Update the JSON output schema of g.region [https://github.com/OSGeo/grass/pull/5929 #5929]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 4''' (June 23 - June 29) ||&lt;br /&gt;
# Update the JSON output schema of v.to.db [https://github.com/OSGeo/grass/pull/5946 #5946]&lt;br /&gt;
# Update the JSON output schema of r.profile [https://github.com/OSGeo/grass/pull/5962 #5962]&lt;br /&gt;
# Add SHELL and CSV output support for r.univar [https://github.com/OSGeo/grass/pull/5966 #5966]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 5''' (June 30 - July 6) ||&lt;br /&gt;
# Add test file in r.regression.line [https://github.com/OSGeo/grass/pull/5990 #5990]&lt;br /&gt;
# Add JSON support for r.regression.line [https://github.com/OSGeo/grass/pull/5993 #5993]&lt;br /&gt;
# Add test file in r.stats.quantile [https://github.com/OSGeo/grass/pull/6002 #6002]&lt;br /&gt;
# Add JSON support for r.stats.quantile [https://github.com/OSGeo/grass/pull/6007 #6007]&lt;br /&gt;
# Add test file in r.volume [https://github.com/OSGeo/grass/pull/6027 #6027]&lt;br /&gt;
# Add JSON support for r.volume [https://github.com/OSGeo/grass/pull/6036 #6036]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 6''' (July 7 - July 13) ||&lt;br /&gt;
# Add JSON support for db.columns [https://github.com/OSGeo/grass/pull/6042 #6042]&lt;br /&gt;
# Add test file in m.measure [https://github.com/OSGeo/grass/pull/6051 #6051]&lt;br /&gt;
# Add test file in db.connect [https://github.com/OSGeo/grass/pull/6052 #6052]&lt;br /&gt;
# Add JSON support for m.measure [https://github.com/OSGeo/grass/pull/6053 #6053]&lt;br /&gt;
# Add JSON support for db.connect [https://github.com/OSGeo/grass/pull/6059 #6059]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | '''Week 7''' (July 14 - July 20) ||&lt;br /&gt;
# Add test file in r.regression.multi [https://github.com/OSGeo/grass/pull/6066 #6066]&lt;br /&gt;
# Add test file in v.db.connect [https://github.com/OSGeo/grass/pull/6067 #6067]&lt;br /&gt;
# Add JSON support for r.regression.multi [https://github.com/OSGeo/grass/pull/6075 #6075]&lt;br /&gt;
# Add JSON support for v.db.connect [https://github.com/OSGeo/grass/pull/6077 #6077]&lt;br /&gt;
# Submit MidTerm evaluation.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 8''' (July 21 - July 27) ||&lt;br /&gt;
# Add JSON support for g.findfile [https://github.com/OSGeo/grass/pull/6091 #6091]&lt;br /&gt;
# Add test file in r3.info [https://github.com/OSGeo/grass/pull/6098 #6098]&lt;br /&gt;
# Add JSON support for r3.info [https://github.com/OSGeo/grass/pull/6103 #6103]&lt;br /&gt;
# Add test file in v.what.rast [https://github.com/OSGeo/grass/pull/6109 #6109]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 9''' (July 28 - August 3) ||&lt;br /&gt;
# Update format to CSV instead of shell in v.category [https://github.com/OSGeo/grass/pull/6132 #6132]&lt;br /&gt;
# Add CSV output support to r.stats [https://github.com/OSGeo/grass/pull/6133 #6133]&lt;br /&gt;
# Add CSV headers to r.volume [https://github.com/OSGeo/grass/pull/6134 #6134]&lt;br /&gt;
# Add JSON support for v.what.rast [https://github.com/OSGeo/grass/pull/6140 #6140]&lt;br /&gt;
# Add CSV output support to r.profile [https://github.com/OSGeo/grass/pull/6145 #6145]&lt;br /&gt;
# Update test cases in r.distance [https://github.com/OSGeo/grass/pull/6150 #6150]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 10''' (August 4 - August 10) ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 11''' (August 11 - August 17) ||&lt;br /&gt;
# Add JSON and CSV support for r.distance [https://github.com/OSGeo/grass/pull/6204 #6204]&lt;br /&gt;
# Add more test cases in v.class [https://github.com/OSGeo/grass/pull/6205 #6205]&lt;br /&gt;
# Add JSON and CSV support for v.class [https://github.com/OSGeo/grass/pull/6210 #6210]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 12''' (August 18 - August 24) ||&lt;br /&gt;
# Update JSON output format for v.what [https://github.com/OSGeo/grass/pull/6252 #6252]&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Evaluation Period &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | August 25 - September 1 ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
# Submit code, final evaluation and write the final GSoC report.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Reports =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* Introduced myself on the [https://discourse.osgeo.org/t/gsoc-2025-introduction-nishant-bansal/147005 OSGeo Discourse mailing list].&lt;br /&gt;
* Created both my [https://wiki.osgeo.org/wiki/User:Nishantbansal2003 personal Wiki page] and the [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C project Wiki page], adding all necessary project-related information.&lt;br /&gt;
* Read GRASS documentation to support the addition of Python and JSON examples.&lt;br /&gt;
* Worked on the following pull requests:&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5688 #5688]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5773 #5773]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5775 #5775]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5784 #5784]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5785 #5785]&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to the g.mapset and r.what.color modules.&lt;br /&gt;
* If time permits, I will begin improving the r.info interface: [https://github.com/OSGeo/grass/issues/5793 Issue #5793]&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
'''Project Discussions and Meetings'''&lt;br /&gt;
* '''14 May 2025''': Introductory meeting discussing JSON support and overall project milestones.&lt;br /&gt;
* '''21 May 2025''': Introduction with fellow developers. Discussed priority tools, adding Python/Pandas examples, and approaches for finalizing the JSON schema for each module.&lt;br /&gt;
&lt;br /&gt;
== Week-1 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.mapset''': Added JSON output support, now you can use -p and -l flags to get JSON-formatted results.&lt;br /&gt;
* '''r.univar''': Fixed a bug causing an uninitialized zone_value.&lt;br /&gt;
* '''r.what.color''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5822 #5822])&lt;br /&gt;
* '''r.info (regression tests)''': To maintain backward compatibility while updating its interface, I added strong regression tests.&lt;br /&gt;
* '''r.info (interface improvements)''': Began improving the module’s interface. (See PR [https://github.com/OSGeo/grass/pull/5859 #5859])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.version (see issue [https://github.com/OSGeo/grass/issues/5816 #5816]).&lt;br /&gt;
* Add JSON output support to i.group (see issue [https://github.com/OSGeo/grass/issues/5815 #5815]).&lt;br /&gt;
* If time permits, write tests for r.stats (see issue [https://github.com/OSGeo/grass/issues/5814 #5814]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-2 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.version''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5863 #5863])&lt;br /&gt;
* '''i.group''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5870 #5870])&lt;br /&gt;
* '''r.stats (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats''': Added tests for JSON output; this uncovered a bug, which was fixed alongside.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.distance (see issue [https://github.com/OSGeo/grass/issues/5846 #5846]).&lt;br /&gt;
* Add JSON output support to g.list (see issue [https://github.com/OSGeo/grass/issues/5848 #5848]).&lt;br /&gt;
* If time permits, fix the JSON output format of g.region (see issue [https://github.com/OSGeo/grass/issues/5828 #5828]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-3 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.distance''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5898 #5898])&lt;br /&gt;
* '''r.stats''': Fixed a bug causing an uninitialized &amp;lt;code&amp;gt;window&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
* '''g.list (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''g.list''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5921 #5921])&lt;br /&gt;
* '''g.region''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5929 #5929])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.to.db (see issue [https://github.com/OSGeo/grass/pull/5711 #5711]).&lt;br /&gt;
* Update JSON output format and documentation of r.profile (see issue [https://github.com/OSGeo/grass/pull/5834 #5834]).&lt;br /&gt;
* If time permits, add shell and csv output formats to r.univar (see issue [https://github.com/OSGeo/grass/pull/5824 #5824]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-4 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.to.db''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5946 #5946])&lt;br /&gt;
* '''r.profile''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5962 #5962])&lt;br /&gt;
* '''r.univar''': Implemented SHELL and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/5966 #5966])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.regression.line (see issue [https://github.com/OSGeo/grass/pull/5950 #5950]).&lt;br /&gt;
* Add JSON output support to r.stats.quantile (see issue [https://github.com/OSGeo/grass/pull/5951 #5951]).&lt;br /&gt;
* Add JSON output support to r.volume (see issue [https://github.com/OSGeo/grass/pull/5949 #5949]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-5 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.line (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.line''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5993 #5993])&lt;br /&gt;
* '''r.stats.quantile (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats.quantile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6007 #6007])&lt;br /&gt;
* '''r.volume (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.volume''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6036 #6036])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to m.measure (see issue [https://github.com/OSGeo/grass/pull/6006 #6006]).&lt;br /&gt;
* Add JSON output support to db.columns (see issue [https://github.com/OSGeo/grass/pull/6008 #6008]).&lt;br /&gt;
* Add JSON output support to db.connect (see issue [https://github.com/OSGeo/grass/pull/6009 #6009]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-6 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''db.columns''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6042 #6042])&lt;br /&gt;
* '''m.measure (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''m.measure''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6053 #6053])&lt;br /&gt;
* '''db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6059 #6059])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to v.db.connect (see issue [https://github.com/OSGeo/grass/pull/6014 #6014]).&lt;br /&gt;
* Add JSON output support to r.regression.multi (see issue [https://github.com/OSGeo/grass/pull/6010 #6010]).&lt;br /&gt;
* If time permits, add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* If time permits, add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-7 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.multi (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''v.db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.multi''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6075 #6075])&lt;br /&gt;
* '''v.db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6077 #6077])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* Add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
* If time permits, add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-8 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.findfile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6091 #6091])&lt;br /&gt;
* '''r3.info (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a flag-handling bug.&lt;br /&gt;
* '''r3.info''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6103 #6103])&lt;br /&gt;
* '''v.what.rast (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a sorting bug.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
* Update format to CSV instead of shell in v.category (see issue [https://github.com/OSGeo/grass/pull/6025 #6025]).&lt;br /&gt;
* Add CSV output support to r.stats (see issue [https://github.com/OSGeo/grass/issues/5835 #5835]).&lt;br /&gt;
* If time permits, add CSV output support to r.profile (see issue [https://github.com/OSGeo/grass/issues/5958 #5958]).&lt;br /&gt;
* If time permits, add CSV headers to r.volume (see issue [https://github.com/OSGeo/grass/issues/6049 #6049]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I don’t have any blockers this week. However, I’ll be a little busy with some personal work from August 3 to August 10, so I’ll try to complete next week’s tasks this week itself.&lt;br /&gt;
&lt;br /&gt;
== Week-9 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.category''': Updated format to CSV instead of shell. (See PR [https://github.com/OSGeo/grass/pull/6132 #6132])&lt;br /&gt;
* '''r.stats''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6133 #6133])&lt;br /&gt;
* '''r.volume''': Implemented CSV column headers support. (See PR [https://github.com/OSGeo/grass/pull/6134 #6134])&lt;br /&gt;
* '''v.what.rast''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6140 #6140])&lt;br /&gt;
* '''r.profile''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6145 #6145])&lt;br /&gt;
* '''r.distance (regression tests)''': Updated regression tests to ensure backward compatibility with new JSON support. (See PR [https://github.com/OSGeo/grass/pull/6150 #6150])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* I’ll be a bit busy with some personal work from August 3 to 10, so I completed next week’s tasks last week itself. I’ve already informed my mentors about my limited availability.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* Yes, I’ll be a bit busy with some personal work from August 3 to 10.&lt;br /&gt;
&lt;br /&gt;
== Week-10 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* This week I was busy with some personal work, so I did not complete any additional tasks. However, I had already finished this week’s tasks last week. This week, I mostly focused on handling reviews for those PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.distance (see issue [https://github.com/OSGeo/grass/issues/6135 #6135]).&lt;br /&gt;
* Add JSON output support to v.class (see issue [https://github.com/OSGeo/grass/issues/6136 #6136]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-11 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.distance''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6204 #6204])&lt;br /&gt;
* '''v.class''': Updated regression tests to ensure backward compatibility with new JSON support and fixed a out-of-bounds bug. (See PR [https://github.com/OSGeo/grass/pull/6205 #6205])&lt;br /&gt;
* '''v.class''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6210 #6210])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Discuss next week’s tasks with my mentors, if no issues are assigned, I’ll identify tools that currently lack JSON support and evaluate which ones are feasible to add it to.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-12 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.what''': Update JSON output format. (See PR [https://github.com/OSGeo/grass/pull/6252 #6252])&lt;br /&gt;
* Addressed review comments on my open PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
= Final Report =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Title''' || Add JSON output to different tools in C for GRASS&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo (Open Source Geospatial Foundation)]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''Program''' || Google Summer of Code 2025&lt;br /&gt;
|-&lt;br /&gt;
| '''Contributions''' || [https://github.com/OSGeo/grass/pulls?q=is%3Apr+author%3ANishantBansal2003+ Pull Requests]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
During my GSoC project, I addressed the challenge that most GRASS tools produced only plain text output, forcing users to write custom parsing code for Python-based workflows. The task was to make these tools more data-science friendly by adding structured output formats. To achieve this, I extended the use of the Parson library to implement consistent JSON output across multiple modules, refined the JSON structure introduced in the previous GSoC, and added optional support for SHELL and CSV outputs where appropriate. I developed comprehensive Python test cases, ensured backward compatibility, and provided documentation with practical examples such as loading JSON into pandas. As a result, GRASS users can now directly consume structured outputs in modern workflows, reducing parsing overhead, improving interoperability, and paving the way for broader adoption of GRASS in data science contexts.&lt;br /&gt;
&lt;br /&gt;
== The state of integration BEFORE the start of GSoC ==&lt;br /&gt;
Before the start of GSoC, the integration of GRASS with data science workflows was limited due to several challenges. The JSON outputs introduced in the previous GSoC contained deeply nested hierarchies, making them difficult to use directly with libraries such as '''pandas''' or in broader data science pipelines. While some tools already supported JSON (e.g., &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;), many important and highly demanded modules lacked JSON support, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt; and many more. This lack of consistency limited the seamless adoption of GRASS in analytics and machine learning contexts. Moreover, there was no clear '''documentation of the JSON schema''' or guidance on how to parse and utilize these outputs effectively in '''python or pandas''', which made it difficult for users to understand the use cases and integrate GRASS outputs into modern data science workflows.&lt;br /&gt;
&lt;br /&gt;
== The state of integration AFTER GSoC ==&lt;br /&gt;
&lt;br /&gt;
After GSoC, the integration state of JSON and alternative output formats in GRASS has significantly improved. I refactored the JSON structures for tools such as &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;, and others, removing unnecessary nesting introduced during the previous GSoC. This makes their outputs much easier to consume directly in &amp;lt;b&amp;gt;Python&amp;lt;/b&amp;gt; or with &amp;lt;b&amp;gt;pandas&amp;lt;/b&amp;gt;. In addition, JSON support has been extended to many essential and frequently used modules, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;, and many more. I also added detailed documentation of the JSON schema and provided examples showing how to parse and use these outputs effectively with Python and pandas. Together, these improvements make the adoption of GRASS in modern &amp;lt;b&amp;gt;data science workflows&amp;lt;/b&amp;gt; far more seamless and accessible.&lt;br /&gt;
&lt;br /&gt;
=== Enhancements made per tool ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;: Simplified JSON structure for univariate statistics, removed unnecessary hierarchy, and added new output format options (CSV, shell).&lt;br /&gt;
* &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;: Added JSON support for querying raster map colors, with a Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;: Added JSON support for reporting the current mapset, with a Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;: Updated JSON structure for raster map metadata, removing hierarchy for easier parsing. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;: Simplified JSON output for geographic region boundaries, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;: Added JSON support for GRASS version information, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;: Added JSON support for listing imagery groups, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;: Added JSON and CSV support for raster area statistics, with Python and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;: Refined JSON schema for nearest element queries, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;: Added JSON support for listing GRASS database files, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;: Updated JSON schema for printing vector attribute values, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;: Simplified JSON output, added CSV support, and included a matplotlib example for profile visualization.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;: Updated JSON schema for linear regression between rasters, with Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;: Updated JSON schema for category quantiles, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;: Added JSON support for raster volume calculations, fixed missing headers in CSV output, and provided pandas examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.columns&amp;lt;/code&amp;gt;: Added JSON output for listing database table columns, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;: Added JSON output for measuring lengths and areas, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.connect&amp;lt;/code&amp;gt;: Added JSON output for DB connection info, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.multi&amp;lt;/code&amp;gt;: Added JSON output for multiple regression between rasters, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.db.connect&amp;lt;/code&amp;gt;: Added JSON output for vector map attribute connections, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.findfile&amp;lt;/code&amp;gt;: Added JSON output for GRASS database file search, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;: Added JSON output for 3D raster map info, with Python example. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;: Added JSON output for extracting raster values at vector points, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt;: Added JSON and CSV support for locating closest points between raster objects, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;: Added JSON and CSV support for attribute data, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;: Migrated from manually written JSON to Parson-based JSON output, simplified schema, and provided Python parsing examples.&lt;br /&gt;
&lt;br /&gt;
All these changes were accompanied by regression tests to ensure that new JSON/CSV/SHELL/PLAIN output options do not break existing functionality. Additionally, I introduced comprehensive Python test cases for these outputs, making the enhancements reliable and future-proof. During this work, I also fixed several bugs in modules such as &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;, strengthening the stability of GRASS as a whole.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
To sum up, I’m glad to have met the three core objectives of my project with the constant support of my mentors:&lt;br /&gt;
&lt;br /&gt;
* Brought JSON output to several important and long-requested modules, added regression tests, and ensured reliable future test coverage.&lt;br /&gt;
* Enhanced the JSON schema introduced in last year’s GSoC by reducing unnecessary hierarchy, making it more consistent across tools, and providing Python/Pandas examples for practical use.&lt;br /&gt;
* Expanded &amp;lt;b&amp;gt;CSV&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;SHELL&amp;lt;/b&amp;gt; output formats to additional tools where they could bring value.&lt;br /&gt;
&lt;br /&gt;
This journey has been both rewarding and educational, and I’m grateful for the opportunity to contribute to GRASS through GSoC 2025. I especially want to thank &amp;lt;b&amp;gt;Anna Petrasova&amp;lt;/b&amp;gt; and the GRASS Development Team for their guidance and support. I’m excited to keep building on this work and further extend JSON and other features in the future.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
There is significant scope to extend structured output support across GRASS tools. In particular, future efforts should focus on:&lt;br /&gt;
* Expanding JSON output to additional modules, with details tracked here: [https://github.com/orgs/OSGeo/projects/10 GRASS JSON Outputs Project].&lt;br /&gt;
* Refining and standardizing the JSON schema to better support complex workflows and integrations.&lt;br /&gt;
* Exploring and implementing other output formats (e.g., SHELL, CSV, PLAIN) where they can improve usability and automation.&lt;br /&gt;
I also plan to continue contributing to GRASS by extending JSON support to more modules and engaging in community discussions around schema design and format integration.&lt;br /&gt;
&lt;br /&gt;
== Log of Pull Requests ==&lt;br /&gt;
Below is a list of pull requests submitted to the GRASS repository during GSoC 2025:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pull Request !! Description  !! Date   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5688 #5688] || r.univar: Fix JSON structure || May 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5773 #5773] || r.what.color: Add test file || May 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5775 #5775] || g.mapset: Add test file || May 26, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5784 #5784] || r.info: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;Closed&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5785 #5785] || g.region: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5810 #5810] || g.mapset: Add JSON support || June 2, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5821 #5821] || r.univar: Fix uninitialized zone_value || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5822 #5822] || r.what.color: Add JSON support || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5842 #5842] || r.info: Update test file || June 5, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5859 #5859] || r.info: Improve interface || June 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5863 #5863] || g.version: Add JSON support || June 9, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5870 #5870] || i.group: Add JSON support || June 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5879 #5879] || r.stats: Add test file || June 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5892 #5892] || r.stats: Add tests for JSON output || June 14, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5898 #5898] || v.distance: Update JSON format || June 16, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5900 #5900] || r.stats: fix uninitialised window value || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5906 #5906] || g.list: Add test file || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5921 #5921] || g.list: Add JSON support || June 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5929 #5929] || g.region: Update JSON format || June 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5946 #5946] || v.to.db: Update JSON format || June 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5962 #5962] || r.profile: Update JSON format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5966 #5966] || r.univar: Add shell and CSV format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5990 #5990] || r.regression.line: Add test file || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5993 #5993] || r.regression.line: Add JSON support || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6002 #6002] || r.stats.quantile: Add test file || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6007 #6007] || r.stats.quantile: Add JSON support || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6027 #6027] || r.volume: Add test file || July 4, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6036 #6036] || r.volume: Add JSON support || July 6, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6042 #6042] || db.columns: Add JSON support || July 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6051 #6051] || m.measure: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6052 #6052] || db.connect: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6053 #6053] || m.measure: Add JSON support || July 11, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6059 #6059] || db.connect: Add JSON support || July 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6066 #6066] || r.regression.multi: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6067 #6067] || v.db.connect: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6075 #6075] || r.regression.multi: Add JSON support || July 18, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6077 #6077] || v.db.connect: Add JSON support || July 19, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6091 #6091] || g.findfile: Add JSON support || July 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6098 #6098] || r3.info: Add test file || July 22, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6103 #6103] || r3.info: Add JSON support || July 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6109 #6109] || v.what.rast: Add test file || July 24, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6132 #6132] || v.category: Use CSV format instead of shell format || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6133 #6133] || r.stats: add CSV support || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6134 #6134] || r.volume: add csv column headers || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6140 #6140] || v.what.rast: Add JSON support || July 29, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6145 #6145] || r.profile: Add CSV support || July 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6150 #6150] || r.distance: Update existing test cases || August 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6204 #6204] || r.distance: Add JSON and CSV support || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6205 #6205] || v.class: Add more test cases and fix out-of-bounds bug || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6210 #6210] || v.class: Add JSON and CSV support || August 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6252 #6252] || v.what: Update JSON output format || August 23, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Additional Links ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Ttile&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| OSGeo Wiki Page&lt;br /&gt;
| [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C Add JSON output to different tools in C for GRASS]&lt;br /&gt;
|-&lt;br /&gt;
| Github Fork&lt;br /&gt;
| [https://github.com/NishantBansal2003/grass GitHub Fork]&lt;br /&gt;
|-&lt;br /&gt;
| GSoC Page&lt;br /&gt;
| [https://summerofcode.withgoogle.com/programs/2025/projects/GPVGd3DH Link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples &amp;amp; Images ==&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; JSON output in Python ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; can be directly loaded into a pandas DataFrame and used for plotting with matplotlib.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
# Run r.profile command&lt;br /&gt;
elevation = gs.read_command(&lt;br /&gt;
    &amp;quot;r.profile&amp;quot;,&lt;br /&gt;
    input=&amp;quot;elevation&amp;quot;,&lt;br /&gt;
    coordinates=&amp;quot;641712,226095,641546,224138,641546,222048,641049,221186&amp;quot;,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
    flags=&amp;quot;gc&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Load the JSON data into a dataframe&lt;br /&gt;
df = pd.read_json(elevation)&lt;br /&gt;
print(df)&lt;br /&gt;
&lt;br /&gt;
# Create the scatter plot&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
plt.scatter(df[&amp;quot;distance&amp;quot;], df[&amp;quot;value&amp;quot;], c=df[&amp;quot;color&amp;quot;], marker=&amp;quot;o&amp;quot;)&lt;br /&gt;
plt.title(&amp;quot;Profile of Distance vs. Elevation with Color Coding&amp;quot;)&lt;br /&gt;
plt.xlabel(&amp;quot;Distance (meters)&amp;quot;)&lt;br /&gt;
plt.ylabel(&amp;quot;Elevation&amp;quot;)&lt;br /&gt;
plt.grid(True)&lt;br /&gt;
plt.show()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame Output (first 10 rows) ====  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
         easting       northing   distance      value    color&lt;br /&gt;
0  641712.000000  226095.000000   0.000000  84.661507  #71FF00&lt;br /&gt;
1  641711.154826  226085.036106   9.999675  84.511765  #6FFF00&lt;br /&gt;
2  641710.309651  226075.072213  19.999349  84.241806  #6BFF00&lt;br /&gt;
3  641709.464477  226065.108319  29.999024  84.304214  #6CFF00&lt;br /&gt;
4  641708.619302  226055.144426  39.998699  84.174400  #6AFF00&lt;br /&gt;
5  641707.774128  226045.180532  49.998374  84.112534  #6AFF00&lt;br /&gt;
6  641706.928954  226035.216639  59.998048  84.011208  #68FF00&lt;br /&gt;
7  641706.083779  226025.252745  69.997723  83.834084  #66FF00&lt;br /&gt;
8  641705.238605  226015.288851  79.997398  83.870193  #67FF00&lt;br /&gt;
9  641704.393430  226005.324958  89.997073  84.194908  #6BFF00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Visualization ====  &lt;br /&gt;
&lt;br /&gt;
Matplotlib scatter plot generated from the &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; JSON output: &lt;br /&gt;
&lt;br /&gt;
[[File:R profile plot.png]]&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt; can be directly loaded into a pandas DataFrame.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.class&amp;quot;,&lt;br /&gt;
    map=&amp;quot;bridges&amp;quot;,&lt;br /&gt;
    column=&amp;quot;YEAR_BUILT&amp;quot;,&lt;br /&gt;
    algorithm=&amp;quot;std&amp;quot;,&lt;br /&gt;
    nbclasses=5,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data[&amp;quot;intervals&amp;quot;])&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output (intervals) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
          from           to  frequency&lt;br /&gt;
0  1891.000000  1938.829689        750&lt;br /&gt;
1  1938.829689  1954.722836       1841&lt;br /&gt;
2  1954.722836  1970.615983       5556&lt;br /&gt;
3  1970.615983  1986.509130       1788&lt;br /&gt;
4  1986.509130  1997.000000       1003&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame to display categories and values.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.what.rast&amp;quot;, map=&amp;quot;bridges&amp;quot;, raster=&amp;quot;elevation&amp;quot;, flags=&amp;quot;p&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    category       value&lt;br /&gt;
0       4635   86.851212&lt;br /&gt;
1       4648   87.883255&lt;br /&gt;
2       4688  103.382004&lt;br /&gt;
3       4709   67.387856&lt;br /&gt;
4       4986   90.972832&lt;br /&gt;
5       4991   86.550629&lt;br /&gt;
6       5027   84.256355&lt;br /&gt;
7       5060   79.500443&lt;br /&gt;
8       5071   78.732864&lt;br /&gt;
9       5089   85.703636&lt;br /&gt;
10      5096  115.967323&lt;br /&gt;
11      5130   81.055870&lt;br /&gt;
12      5150   92.812927&lt;br /&gt;
13      5166   88.149483&lt;br /&gt;
14      5184   76.426331&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame to locate closest points.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
&lt;br /&gt;
result = gs.parse_command(&lt;br /&gt;
    &amp;quot;r.distance&amp;quot;, map=[&amp;quot;zipcodes&amp;quot;, &amp;quot;lakes&amp;quot;], flags=&amp;quot;l&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
df = pd.json_normalize(result)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output (first 10 rows, truncated) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
       distance  from_cell.category  from_cell.easting  ...  to_cell.easting to_cell.northing  to_cell.label&lt;br /&gt;
0  11158.507466               27511      632604.951740  ...    640584.676990    215499.220687       Dam/Weir&lt;br /&gt;
1   1037.271198               27511      631734.981693  ...    632314.961724    221839.026534      Lake/Pond&lt;br /&gt;
2   2276.988836               27511      630015.040913  ...    630765.015090    219459.099418      Reservoir&lt;br /&gt;
3  14614.155031               27513      631055.005106  ...    640584.676990    215499.220687       Dam/Weir&lt;br /&gt;
4   3635.876453               27513      631674.983759  ...    635164.863600    227198.862392      Lake/Pond&lt;br /&gt;
5   6971.335517               27513      630005.041257  ...    630765.015090    219459.099418      Reservoir&lt;br /&gt;
6   8978.927486               27518      632134.967922  ...    640424.682499    215209.229568       Dam/Weir&lt;br /&gt;
7      0.000000               27518      630005.041257  ...    630005.041257    220199.076757      Lake/Pond&lt;br /&gt;
8    699.975899               27518      630005.041257  ...    630705.017156    219379.101868      Reservoir&lt;br /&gt;
9    509.197766               27529      641154.657366  ...    640674.673892    215249.228343       Dam/Weir&lt;br /&gt;
&lt;br /&gt;
[10 rows x 9 columns]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{GSoC}}&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28670</id>
		<title>GRASS GSoC 2025 Add JSON output to different tools in C</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28670"/>
		<updated>2025-08-24T07:19:07Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: /* Sample DataFrame output (truncated) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Nishant Bansal&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo - Open Source Geospatial Foundation]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/NishantBansal2003/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''GSoC proposal''' || [https://docs.google.com/document/d/1ZPQ9RXU7b_RUDmBmAMeK7ZjFAV1WC7Urd1Zlz678jyw/edit?tab=t.0#heading=h.z6ne0og04bp5 View Proposal]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Abstract =&lt;br /&gt;
Currently, most GRASS tools produce data in plain text by default. This means that users who want to process the output in Python need to create custom parsing code. To make this easier, several modules could be improved by oﬀering JSON as an alternative output format. Recently, the Parson library was added to the GRASS codebase to support JSON output in addition to plain text. Building on the advancements made during the last GSoC, my project aims to expand JSON output capabilities to more tools using the Parson library. I will also work on making the JSON structure introduced in the previous GSoC more useful and consistent. Additionally, I plan to add support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
&lt;br /&gt;
# Working with mentors to finalize the structure of the JSON output.&lt;br /&gt;
# Adding an option to choose the output format (plain text or JSON) for each updated tool.&lt;br /&gt;
# Make the JSON structure introduced during the last GSoC more useful and consistent across tools.&lt;br /&gt;
# Developing Python test cases to ensure that the JSON output works correctly and to avoid future issues.&lt;br /&gt;
# Providing basic documentation and example JSON outputs for each modified tool.&lt;br /&gt;
# Adding support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
# Develop simple examples demonstrating how to use JSON output in a data science workflow, such as reading JSON data into pandas or python.&lt;br /&gt;
&lt;br /&gt;
= Timeline =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Period !! Timeline  !! Tasks   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period &lt;br /&gt;
||&lt;br /&gt;
May 8 - June 1  &lt;br /&gt;
|| &lt;br /&gt;
# Reviewed the work done during the last GSoC to stabilize the JSON output.&lt;br /&gt;
# Discussed the priority tools for adding JSON support.&lt;br /&gt;
# Read GRASS documentation to add Python and JSON examples to the documentation.&lt;br /&gt;
|| &lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;13&amp;quot; | Official Coding Period &lt;br /&gt;
|-&lt;br /&gt;
| '''Week 1''' (June 2 - June 8) || &lt;br /&gt;
# Add JSON support for g.mapset [https://github.com/OSGeo/grass/pull/5810 #5810]&lt;br /&gt;
# Fix uninitialized zone_value in r.univar [https://github.com/OSGeo/grass/pull/5821 #5821]&lt;br /&gt;
# Add JSON support for r.what.color [https://github.com/OSGeo/grass/pull/5822 #5822]&lt;br /&gt;
# Update test file in r.info [https://github.com/OSGeo/grass/pull/5842 #5842]&lt;br /&gt;
# Improve interface for r.info [https://github.com/OSGeo/grass/pull/5859 #5859]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 2''' (June 9 - June 15) ||&lt;br /&gt;
# Add JSON support for g.version [https://github.com/OSGeo/grass/pull/5863 #5863]&lt;br /&gt;
# Add JSON support for i.group [https://github.com/OSGeo/grass/pull/5870 #5870]&lt;br /&gt;
# Add test file in r.stats [https://github.com/OSGeo/grass/pull/5879 #5879]&lt;br /&gt;
# Add tests for JSON output in r.stats [https://github.com/OSGeo/grass/pull/5892 #5892]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 3''' (June 16 - June 22) ||&lt;br /&gt;
# Update the JSON output schema of v.distance [https://github.com/OSGeo/grass/pull/5898 #5898]&lt;br /&gt;
# Fix uninitialized window variable in r.stats [https://github.com/OSGeo/grass/pull/5900 #5900]&lt;br /&gt;
# Add test file in g.list [https://github.com/OSGeo/grass/pull/5906 #5906]&lt;br /&gt;
# Add JSON support for g.list [https://github.com/OSGeo/grass/pull/5921 #5921]&lt;br /&gt;
# Update the JSON output schema of g.region [https://github.com/OSGeo/grass/pull/5929 #5929]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 4''' (June 23 - June 29) ||&lt;br /&gt;
# Update the JSON output schema of v.to.db [https://github.com/OSGeo/grass/pull/5946 #5946]&lt;br /&gt;
# Update the JSON output schema of r.profile [https://github.com/OSGeo/grass/pull/5962 #5962]&lt;br /&gt;
# Add SHELL and CSV output support for r.univar [https://github.com/OSGeo/grass/pull/5966 #5966]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 5''' (June 30 - July 6) ||&lt;br /&gt;
# Add test file in r.regression.line [https://github.com/OSGeo/grass/pull/5990 #5990]&lt;br /&gt;
# Add JSON support for r.regression.line [https://github.com/OSGeo/grass/pull/5993 #5993]&lt;br /&gt;
# Add test file in r.stats.quantile [https://github.com/OSGeo/grass/pull/6002 #6002]&lt;br /&gt;
# Add JSON support for r.stats.quantile [https://github.com/OSGeo/grass/pull/6007 #6007]&lt;br /&gt;
# Add test file in r.volume [https://github.com/OSGeo/grass/pull/6027 #6027]&lt;br /&gt;
# Add JSON support for r.volume [https://github.com/OSGeo/grass/pull/6036 #6036]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 6''' (July 7 - July 13) ||&lt;br /&gt;
# Add JSON support for db.columns [https://github.com/OSGeo/grass/pull/6042 #6042]&lt;br /&gt;
# Add test file in m.measure [https://github.com/OSGeo/grass/pull/6051 #6051]&lt;br /&gt;
# Add test file in db.connect [https://github.com/OSGeo/grass/pull/6052 #6052]&lt;br /&gt;
# Add JSON support for m.measure [https://github.com/OSGeo/grass/pull/6053 #6053]&lt;br /&gt;
# Add JSON support for db.connect [https://github.com/OSGeo/grass/pull/6059 #6059]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | '''Week 7''' (July 14 - July 20) ||&lt;br /&gt;
# Add test file in r.regression.multi [https://github.com/OSGeo/grass/pull/6066 #6066]&lt;br /&gt;
# Add test file in v.db.connect [https://github.com/OSGeo/grass/pull/6067 #6067]&lt;br /&gt;
# Add JSON support for r.regression.multi [https://github.com/OSGeo/grass/pull/6075 #6075]&lt;br /&gt;
# Add JSON support for v.db.connect [https://github.com/OSGeo/grass/pull/6077 #6077]&lt;br /&gt;
# Submit MidTerm evaluation.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 8''' (July 21 - July 27) ||&lt;br /&gt;
# Add JSON support for g.findfile [https://github.com/OSGeo/grass/pull/6091 #6091]&lt;br /&gt;
# Add test file in r3.info [https://github.com/OSGeo/grass/pull/6098 #6098]&lt;br /&gt;
# Add JSON support for r3.info [https://github.com/OSGeo/grass/pull/6103 #6103]&lt;br /&gt;
# Add test file in v.what.rast [https://github.com/OSGeo/grass/pull/6109 #6109]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 9''' (July 28 - August 3) ||&lt;br /&gt;
# Update format to CSV instead of shell in v.category [https://github.com/OSGeo/grass/pull/6132 #6132]&lt;br /&gt;
# Add CSV output support to r.stats [https://github.com/OSGeo/grass/pull/6133 #6133]&lt;br /&gt;
# Add CSV headers to r.volume [https://github.com/OSGeo/grass/pull/6134 #6134]&lt;br /&gt;
# Add JSON support for v.what.rast [https://github.com/OSGeo/grass/pull/6140 #6140]&lt;br /&gt;
# Add CSV output support to r.profile [https://github.com/OSGeo/grass/pull/6145 #6145]&lt;br /&gt;
# Update test cases in r.distance [https://github.com/OSGeo/grass/pull/6150 #6150]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 10''' (August 4 - August 10) ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 11''' (August 11 - August 17) ||&lt;br /&gt;
# Add JSON and CSV support for r.distance [https://github.com/OSGeo/grass/pull/6204 #6204]&lt;br /&gt;
# Add more test cases in v.class [https://github.com/OSGeo/grass/pull/6205 #6205]&lt;br /&gt;
# Add JSON and CSV support for v.class [https://github.com/OSGeo/grass/pull/6210 #6210]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 12''' (August 18 - August 24) ||&lt;br /&gt;
# Update JSON output format for v.what [https://github.com/OSGeo/grass/pull/6252 #6252]&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Evaluation Period &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | August 25 - September 1 ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
# Submit code, final evaluation and write the final GSoC report.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Reports =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* Introduced myself on the [https://discourse.osgeo.org/t/gsoc-2025-introduction-nishant-bansal/147005 OSGeo Discourse mailing list].&lt;br /&gt;
* Created both my [https://wiki.osgeo.org/wiki/User:Nishantbansal2003 personal Wiki page] and the [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C project Wiki page], adding all necessary project-related information.&lt;br /&gt;
* Read GRASS documentation to support the addition of Python and JSON examples.&lt;br /&gt;
* Worked on the following pull requests:&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5688 #5688]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5773 #5773]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5775 #5775]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5784 #5784]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5785 #5785]&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to the g.mapset and r.what.color modules.&lt;br /&gt;
* If time permits, I will begin improving the r.info interface: [https://github.com/OSGeo/grass/issues/5793 Issue #5793]&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
'''Project Discussions and Meetings'''&lt;br /&gt;
* '''14 May 2025''': Introductory meeting discussing JSON support and overall project milestones.&lt;br /&gt;
* '''21 May 2025''': Introduction with fellow developers. Discussed priority tools, adding Python/Pandas examples, and approaches for finalizing the JSON schema for each module.&lt;br /&gt;
&lt;br /&gt;
== Week-1 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.mapset''': Added JSON output support, now you can use -p and -l flags to get JSON-formatted results.&lt;br /&gt;
* '''r.univar''': Fixed a bug causing an uninitialized zone_value.&lt;br /&gt;
* '''r.what.color''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5822 #5822])&lt;br /&gt;
* '''r.info (regression tests)''': To maintain backward compatibility while updating its interface, I added strong regression tests.&lt;br /&gt;
* '''r.info (interface improvements)''': Began improving the module’s interface. (See PR [https://github.com/OSGeo/grass/pull/5859 #5859])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.version (see issue [https://github.com/OSGeo/grass/issues/5816 #5816]).&lt;br /&gt;
* Add JSON output support to i.group (see issue [https://github.com/OSGeo/grass/issues/5815 #5815]).&lt;br /&gt;
* If time permits, write tests for r.stats (see issue [https://github.com/OSGeo/grass/issues/5814 #5814]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-2 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.version''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5863 #5863])&lt;br /&gt;
* '''i.group''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5870 #5870])&lt;br /&gt;
* '''r.stats (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats''': Added tests for JSON output; this uncovered a bug, which was fixed alongside.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.distance (see issue [https://github.com/OSGeo/grass/issues/5846 #5846]).&lt;br /&gt;
* Add JSON output support to g.list (see issue [https://github.com/OSGeo/grass/issues/5848 #5848]).&lt;br /&gt;
* If time permits, fix the JSON output format of g.region (see issue [https://github.com/OSGeo/grass/issues/5828 #5828]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-3 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.distance''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5898 #5898])&lt;br /&gt;
* '''r.stats''': Fixed a bug causing an uninitialized &amp;lt;code&amp;gt;window&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
* '''g.list (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''g.list''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5921 #5921])&lt;br /&gt;
* '''g.region''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5929 #5929])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.to.db (see issue [https://github.com/OSGeo/grass/pull/5711 #5711]).&lt;br /&gt;
* Update JSON output format and documentation of r.profile (see issue [https://github.com/OSGeo/grass/pull/5834 #5834]).&lt;br /&gt;
* If time permits, add shell and csv output formats to r.univar (see issue [https://github.com/OSGeo/grass/pull/5824 #5824]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-4 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.to.db''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5946 #5946])&lt;br /&gt;
* '''r.profile''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5962 #5962])&lt;br /&gt;
* '''r.univar''': Implemented SHELL and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/5966 #5966])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.regression.line (see issue [https://github.com/OSGeo/grass/pull/5950 #5950]).&lt;br /&gt;
* Add JSON output support to r.stats.quantile (see issue [https://github.com/OSGeo/grass/pull/5951 #5951]).&lt;br /&gt;
* Add JSON output support to r.volume (see issue [https://github.com/OSGeo/grass/pull/5949 #5949]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-5 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.line (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.line''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5993 #5993])&lt;br /&gt;
* '''r.stats.quantile (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats.quantile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6007 #6007])&lt;br /&gt;
* '''r.volume (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.volume''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6036 #6036])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to m.measure (see issue [https://github.com/OSGeo/grass/pull/6006 #6006]).&lt;br /&gt;
* Add JSON output support to db.columns (see issue [https://github.com/OSGeo/grass/pull/6008 #6008]).&lt;br /&gt;
* Add JSON output support to db.connect (see issue [https://github.com/OSGeo/grass/pull/6009 #6009]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-6 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''db.columns''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6042 #6042])&lt;br /&gt;
* '''m.measure (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''m.measure''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6053 #6053])&lt;br /&gt;
* '''db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6059 #6059])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to v.db.connect (see issue [https://github.com/OSGeo/grass/pull/6014 #6014]).&lt;br /&gt;
* Add JSON output support to r.regression.multi (see issue [https://github.com/OSGeo/grass/pull/6010 #6010]).&lt;br /&gt;
* If time permits, add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* If time permits, add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-7 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.multi (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''v.db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.multi''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6075 #6075])&lt;br /&gt;
* '''v.db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6077 #6077])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* Add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
* If time permits, add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-8 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.findfile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6091 #6091])&lt;br /&gt;
* '''r3.info (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a flag-handling bug.&lt;br /&gt;
* '''r3.info''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6103 #6103])&lt;br /&gt;
* '''v.what.rast (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a sorting bug.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
* Update format to CSV instead of shell in v.category (see issue [https://github.com/OSGeo/grass/pull/6025 #6025]).&lt;br /&gt;
* Add CSV output support to r.stats (see issue [https://github.com/OSGeo/grass/issues/5835 #5835]).&lt;br /&gt;
* If time permits, add CSV output support to r.profile (see issue [https://github.com/OSGeo/grass/issues/5958 #5958]).&lt;br /&gt;
* If time permits, add CSV headers to r.volume (see issue [https://github.com/OSGeo/grass/issues/6049 #6049]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I don’t have any blockers this week. However, I’ll be a little busy with some personal work from August 3 to August 10, so I’ll try to complete next week’s tasks this week itself.&lt;br /&gt;
&lt;br /&gt;
== Week-9 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.category''': Updated format to CSV instead of shell. (See PR [https://github.com/OSGeo/grass/pull/6132 #6132])&lt;br /&gt;
* '''r.stats''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6133 #6133])&lt;br /&gt;
* '''r.volume''': Implemented CSV column headers support. (See PR [https://github.com/OSGeo/grass/pull/6134 #6134])&lt;br /&gt;
* '''v.what.rast''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6140 #6140])&lt;br /&gt;
* '''r.profile''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6145 #6145])&lt;br /&gt;
* '''r.distance (regression tests)''': Updated regression tests to ensure backward compatibility with new JSON support. (See PR [https://github.com/OSGeo/grass/pull/6150 #6150])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* I’ll be a bit busy with some personal work from August 3 to 10, so I completed next week’s tasks last week itself. I’ve already informed my mentors about my limited availability.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* Yes, I’ll be a bit busy with some personal work from August 3 to 10.&lt;br /&gt;
&lt;br /&gt;
== Week-10 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* This week I was busy with some personal work, so I did not complete any additional tasks. However, I had already finished this week’s tasks last week. This week, I mostly focused on handling reviews for those PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.distance (see issue [https://github.com/OSGeo/grass/issues/6135 #6135]).&lt;br /&gt;
* Add JSON output support to v.class (see issue [https://github.com/OSGeo/grass/issues/6136 #6136]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-11 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.distance''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6204 #6204])&lt;br /&gt;
* '''v.class''': Updated regression tests to ensure backward compatibility with new JSON support and fixed a out-of-bounds bug. (See PR [https://github.com/OSGeo/grass/pull/6205 #6205])&lt;br /&gt;
* '''v.class''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6210 #6210])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Discuss next week’s tasks with my mentors, if no issues are assigned, I’ll identify tools that currently lack JSON support and evaluate which ones are feasible to add it to.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-12 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.what''': Update JSON output format. (See PR [https://github.com/OSGeo/grass/pull/6252 #6252])&lt;br /&gt;
* Addressed review comments on my open PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
= Final Report =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Title''' || Add JSON output to different tools in C for GRASS&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo (Open Source Geospatial Foundation)]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''Program''' || Google Summer of Code 2025&lt;br /&gt;
|-&lt;br /&gt;
| '''Contributions''' || [https://github.com/OSGeo/grass/pulls?q=is%3Apr+author%3ANishantBansal2003+ Pull Requests]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
During my GSoC project, I addressed the challenge that most GRASS tools produced only plain text output, forcing users to write custom parsing code for Python-based workflows. The task was to make these tools more data-science friendly by adding structured output formats. To achieve this, I extended the use of the Parson library to implement consistent JSON output across multiple modules, refined the JSON structure introduced in the previous GSoC, and added optional support for SHELL and CSV outputs where appropriate. I developed comprehensive Python test cases, ensured backward compatibility, and provided documentation with practical examples such as loading JSON into pandas. As a result, GRASS users can now directly consume structured outputs in modern workflows, reducing parsing overhead, improving interoperability, and paving the way for broader adoption of GRASS in data science contexts.&lt;br /&gt;
&lt;br /&gt;
== The state of integration BEFORE the start of GSoC ==&lt;br /&gt;
Before the start of GSoC, the integration of GRASS with data science workflows was limited due to several challenges. The JSON outputs introduced in the previous GSoC contained deeply nested hierarchies, making them difficult to use directly with libraries such as '''pandas''' or in broader data science pipelines. While some tools already supported JSON (e.g., &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;), many important and highly demanded modules lacked JSON support, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt; and many more. This lack of consistency limited the seamless adoption of GRASS in analytics and machine learning contexts. Moreover, there was no clear '''documentation of the JSON schema''' or guidance on how to parse and utilize these outputs effectively in '''python or pandas''', which made it difficult for users to understand the use cases and integrate GRASS outputs into modern data science workflows.&lt;br /&gt;
&lt;br /&gt;
== The state of integration AFTER GSoC ==&lt;br /&gt;
&lt;br /&gt;
After GSoC, the integration state of JSON and alternative output formats in GRASS has significantly improved. I refactored the JSON structures for tools such as &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;, and others, removing unnecessary nesting introduced during the previous GSoC. This makes their outputs much easier to consume directly in &amp;lt;b&amp;gt;Python&amp;lt;/b&amp;gt; or with &amp;lt;b&amp;gt;pandas&amp;lt;/b&amp;gt;. In addition, JSON support has been extended to many essential and frequently used modules, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;, and many more. I also added detailed documentation of the JSON schema and provided examples showing how to parse and use these outputs effectively with Python and pandas. Together, these improvements make the adoption of GRASS in modern &amp;lt;b&amp;gt;data science workflows&amp;lt;/b&amp;gt; far more seamless and accessible.&lt;br /&gt;
&lt;br /&gt;
=== Enhancements made per tool ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;: Simplified JSON structure for univariate statistics, removed unnecessary hierarchy, and added new output format options (CSV, shell).&lt;br /&gt;
* &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;: Added JSON support for querying raster map colors, with a Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;: Added JSON support for reporting the current mapset, with a Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;: Updated JSON structure for raster map metadata, removing hierarchy for easier parsing. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;: Simplified JSON output for geographic region boundaries, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;: Added JSON support for GRASS version information, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;: Added JSON support for listing imagery groups, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;: Added JSON and CSV support for raster area statistics, with Python and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;: Refined JSON schema for nearest element queries, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;: Added JSON support for listing GRASS database files, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;: Updated JSON schema for printing vector attribute values, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;: Simplified JSON output, added CSV support, and included a matplotlib example for profile visualization.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;: Updated JSON schema for linear regression between rasters, with Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;: Updated JSON schema for category quantiles, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;: Added JSON support for raster volume calculations, fixed missing headers in CSV output, and provided pandas examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.columns&amp;lt;/code&amp;gt;: Added JSON output for listing database table columns, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;: Added JSON output for measuring lengths and areas, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.connect&amp;lt;/code&amp;gt;: Added JSON output for DB connection info, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.multi&amp;lt;/code&amp;gt;: Added JSON output for multiple regression between rasters, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.db.connect&amp;lt;/code&amp;gt;: Added JSON output for vector map attribute connections, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.findfile&amp;lt;/code&amp;gt;: Added JSON output for GRASS database file search, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;: Added JSON output for 3D raster map info, with Python example. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;: Added JSON output for extracting raster values at vector points, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt;: Added JSON and CSV support for locating closest points between raster objects, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;: Added JSON and CSV support for attribute data, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;: Migrated from manually written JSON to Parson-based JSON output, simplified schema, and provided Python parsing examples.&lt;br /&gt;
&lt;br /&gt;
All these changes were accompanied by regression tests to ensure that new JSON/CSV/SHELL/PLAIN output options do not break existing functionality. Additionally, I introduced comprehensive Python test cases for these outputs, making the enhancements reliable and future-proof. During this work, I also fixed several bugs in modules such as &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;, strengthening the stability of GRASS as a whole.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
To sum up, I’m glad to have met the three core objectives of my project with the constant support of my mentors:&lt;br /&gt;
&lt;br /&gt;
* Brought JSON output to several important and long-requested modules, added regression tests, and ensured reliable future test coverage.&lt;br /&gt;
* Enhanced the JSON schema introduced in last year’s GSoC by reducing unnecessary hierarchy, making it more consistent across tools, and providing Python/Pandas examples for practical use.&lt;br /&gt;
* Expanded &amp;lt;b&amp;gt;CSV&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;SHELL&amp;lt;/b&amp;gt; output formats to additional tools where they could bring value.&lt;br /&gt;
&lt;br /&gt;
This journey has been both rewarding and educational, and I’m grateful for the opportunity to contribute to GRASS through GSoC 2025. I especially want to thank &amp;lt;b&amp;gt;Anna Petrasova&amp;lt;/b&amp;gt; and the GRASS Development Team for their guidance and support. I’m excited to keep building on this work and further extend JSON and other features in the future.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
There is significant scope to extend structured output support across GRASS tools. In particular, future efforts should focus on:&lt;br /&gt;
* Expanding JSON output to additional modules, with details tracked here: [https://github.com/orgs/OSGeo/projects/10 GRASS JSON Outputs Project].&lt;br /&gt;
* Refining and standardizing the JSON schema to better support complex workflows and integrations.&lt;br /&gt;
* Exploring and implementing other output formats (e.g., SHELL, CSV, PLAIN) where they can improve usability and automation.&lt;br /&gt;
I also plan to continue contributing to GRASS by extending JSON support to more modules and engaging in community discussions around schema design and format integration.&lt;br /&gt;
&lt;br /&gt;
== Log of Pull Requests ==&lt;br /&gt;
Below is a list of pull requests submitted to the GRASS repository during GSoC 2025:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pull Request !! Description  !! Date   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5688 #5688] || r.univar: Fix JSON structure || May 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5773 #5773] || r.what.color: Add test file || May 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5775 #5775] || g.mapset: Add test file || May 26, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5784 #5784] || r.info: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;Closed&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5785 #5785] || g.region: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5810 #5810] || g.mapset: Add JSON support || June 2, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5821 #5821] || r.univar: Fix uninitialized zone_value || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5822 #5822] || r.what.color: Add JSON support || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5842 #5842] || r.info: Update test file || June 5, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5859 #5859] || r.info: Improve interface || June 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5863 #5863] || g.version: Add JSON support || June 9, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5870 #5870] || i.group: Add JSON support || June 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5879 #5879] || r.stats: Add test file || June 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5892 #5892] || r.stats: Add tests for JSON output || June 14, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5898 #5898] || v.distance: Update JSON format || June 16, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5900 #5900] || r.stats: fix uninitialised window value || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5906 #5906] || g.list: Add test file || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5921 #5921] || g.list: Add JSON support || June 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5929 #5929] || g.region: Update JSON format || June 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5946 #5946] || v.to.db: Update JSON format || June 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5962 #5962] || r.profile: Update JSON format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5966 #5966] || r.univar: Add shell and CSV format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5990 #5990] || r.regression.line: Add test file || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5993 #5993] || r.regression.line: Add JSON support || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6002 #6002] || r.stats.quantile: Add test file || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6007 #6007] || r.stats.quantile: Add JSON support || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6027 #6027] || r.volume: Add test file || July 4, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6036 #6036] || r.volume: Add JSON support || July 6, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6042 #6042] || db.columns: Add JSON support || July 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6051 #6051] || m.measure: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6052 #6052] || db.connect: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6053 #6053] || m.measure: Add JSON support || July 11, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6059 #6059] || db.connect: Add JSON support || July 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6066 #6066] || r.regression.multi: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6067 #6067] || v.db.connect: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6075 #6075] || r.regression.multi: Add JSON support || July 18, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6077 #6077] || v.db.connect: Add JSON support || July 19, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6091 #6091] || g.findfile: Add JSON support || July 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6098 #6098] || r3.info: Add test file || July 22, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6103 #6103] || r3.info: Add JSON support || July 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6109 #6109] || v.what.rast: Add test file || July 24, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6132 #6132] || v.category: Use CSV format instead of shell format || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6133 #6133] || r.stats: add CSV support || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6134 #6134] || r.volume: add csv column headers || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6140 #6140] || v.what.rast: Add JSON support || July 29, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6145 #6145] || r.profile: Add CSV support || July 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6150 #6150] || r.distance: Update existing test cases || August 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6204 #6204] || r.distance: Add JSON and CSV support || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6205 #6205] || v.class: Add more test cases and fix out-of-bounds bug || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6210 #6210] || v.class: Add JSON and CSV support || August 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6252 #6252] || v.what: Update JSON output format || August 23, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Additional Links ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Ttile&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| OSGeo Wiki Page&lt;br /&gt;
| [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C Add JSON output to different tools in C for GRASS]&lt;br /&gt;
|-&lt;br /&gt;
| Github Fork&lt;br /&gt;
| [https://github.com/NishantBansal2003/grass GitHub Fork]&lt;br /&gt;
|-&lt;br /&gt;
| GSoC Page&lt;br /&gt;
| [https://summerofcode.withgoogle.com/programs/2025/projects/GPVGd3DH Link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples &amp;amp; Images ==&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; JSON output in Python ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; can be directly loaded into a pandas DataFrame and used for plotting with matplotlib.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
# Run r.profile command&lt;br /&gt;
elevation = gs.read_command(&lt;br /&gt;
    &amp;quot;r.profile&amp;quot;,&lt;br /&gt;
    input=&amp;quot;elevation&amp;quot;,&lt;br /&gt;
    coordinates=&amp;quot;641712,226095,641546,224138,641546,222048,641049,221186&amp;quot;,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
    flags=&amp;quot;gc&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Load the JSON data into a dataframe&lt;br /&gt;
df = pd.read_json(elevation)&lt;br /&gt;
print(df)&lt;br /&gt;
&lt;br /&gt;
# Create the scatter plot&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
plt.scatter(df[&amp;quot;distance&amp;quot;], df[&amp;quot;value&amp;quot;], c=df[&amp;quot;color&amp;quot;], marker=&amp;quot;o&amp;quot;)&lt;br /&gt;
plt.title(&amp;quot;Profile of Distance vs. Elevation with Color Coding&amp;quot;)&lt;br /&gt;
plt.xlabel(&amp;quot;Distance (meters)&amp;quot;)&lt;br /&gt;
plt.ylabel(&amp;quot;Elevation&amp;quot;)&lt;br /&gt;
plt.grid(True)&lt;br /&gt;
plt.show()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame Output (first 10 rows) ====  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
         easting       northing   distance      value    color&lt;br /&gt;
0  641712.000000  226095.000000   0.000000  84.661507  #71FF00&lt;br /&gt;
1  641711.154826  226085.036106   9.999675  84.511765  #6FFF00&lt;br /&gt;
2  641710.309651  226075.072213  19.999349  84.241806  #6BFF00&lt;br /&gt;
3  641709.464477  226065.108319  29.999024  84.304214  #6CFF00&lt;br /&gt;
4  641708.619302  226055.144426  39.998699  84.174400  #6AFF00&lt;br /&gt;
5  641707.774128  226045.180532  49.998374  84.112534  #6AFF00&lt;br /&gt;
6  641706.928954  226035.216639  59.998048  84.011208  #68FF00&lt;br /&gt;
7  641706.083779  226025.252745  69.997723  83.834084  #66FF00&lt;br /&gt;
8  641705.238605  226015.288851  79.997398  83.870193  #67FF00&lt;br /&gt;
9  641704.393430  226005.324958  89.997073  84.194908  #6BFF00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Visualization ====  &lt;br /&gt;
&lt;br /&gt;
Matplotlib scatter plot generated from the &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; JSON output: &lt;br /&gt;
&lt;br /&gt;
[[File:R profile plot.png]]&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt; can be directly loaded into a pandas DataFrame.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.class&amp;quot;,&lt;br /&gt;
    map=&amp;quot;bridges&amp;quot;,&lt;br /&gt;
    column=&amp;quot;YEAR_BUILT&amp;quot;,&lt;br /&gt;
    algorithm=&amp;quot;std&amp;quot;,&lt;br /&gt;
    nbclasses=5,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data[&amp;quot;intervals&amp;quot;])&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output (intervals) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
          from           to  frequency&lt;br /&gt;
0  1891.000000  1938.829689        750&lt;br /&gt;
1  1938.829689  1954.722836       1841&lt;br /&gt;
2  1954.722836  1970.615983       5556&lt;br /&gt;
3  1970.615983  1986.509130       1788&lt;br /&gt;
4  1986.509130  1997.000000       1003&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame to display categories and values.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.what.rast&amp;quot;, map=&amp;quot;bridges&amp;quot;, raster=&amp;quot;elevation&amp;quot;, flags=&amp;quot;p&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    category       value&lt;br /&gt;
0       4635   86.851212&lt;br /&gt;
1       4648   87.883255&lt;br /&gt;
2       4688  103.382004&lt;br /&gt;
3       4709   67.387856&lt;br /&gt;
4       4986   90.972832&lt;br /&gt;
5       4991   86.550629&lt;br /&gt;
6       5027   84.256355&lt;br /&gt;
7       5060   79.500443&lt;br /&gt;
8       5071   78.732864&lt;br /&gt;
9       5089   85.703636&lt;br /&gt;
10      5096  115.967323&lt;br /&gt;
11      5130   81.055870&lt;br /&gt;
12      5150   92.812927&lt;br /&gt;
13      5166   88.149483&lt;br /&gt;
14      5184   76.426331&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame to locate closest points.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
&lt;br /&gt;
result = gs.parse_command(&lt;br /&gt;
    &amp;quot;r.distance&amp;quot;, map=[&amp;quot;zipcodes&amp;quot;, &amp;quot;lakes&amp;quot;], flags=&amp;quot;l&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
df = pd.json_normalize(result)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output (truncated) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;overflow-x:auto; white-space:nowrap;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
        distance  from_cell.category  from_cell.easting  from_cell.northing from_cell.label  to_cell.category  to_cell.easting  to_cell.northing to_cell.label&lt;br /&gt;
0   11158.870911               27511             632605              223295            CARY             34300           640585            215495      Dam/Weir&lt;br /&gt;
1    1037.304198               27511             631735              222695            CARY             39000           632315            221835     Lake/Pond&lt;br /&gt;
2    2277.059507               27511             630015              221605            CARY             43600           630765            219455     Reservoir&lt;br /&gt;
..           ...                 ...                ...                 ...             ...               ...              ...               ...           ...&lt;br /&gt;
36   4922.600939               27610             642975              219815         RALEIGH             34300           640615            215495      Dam/Weir&lt;br /&gt;
37     50.000000               27610             642655              222765         RALEIGH             39000           642705            222765     Lake/Pond&lt;br /&gt;
38  11368.069317               27610             642305              220945         RALEIGH             43600           631035            219455     Reservoir&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{GSoC}}&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28669</id>
		<title>GRASS GSoC 2025 Add JSON output to different tools in C</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28669"/>
		<updated>2025-08-24T07:18:15Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: /* Sample DataFrame output (truncated) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Nishant Bansal&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo - Open Source Geospatial Foundation]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/NishantBansal2003/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''GSoC proposal''' || [https://docs.google.com/document/d/1ZPQ9RXU7b_RUDmBmAMeK7ZjFAV1WC7Urd1Zlz678jyw/edit?tab=t.0#heading=h.z6ne0og04bp5 View Proposal]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Abstract =&lt;br /&gt;
Currently, most GRASS tools produce data in plain text by default. This means that users who want to process the output in Python need to create custom parsing code. To make this easier, several modules could be improved by oﬀering JSON as an alternative output format. Recently, the Parson library was added to the GRASS codebase to support JSON output in addition to plain text. Building on the advancements made during the last GSoC, my project aims to expand JSON output capabilities to more tools using the Parson library. I will also work on making the JSON structure introduced in the previous GSoC more useful and consistent. Additionally, I plan to add support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
&lt;br /&gt;
# Working with mentors to finalize the structure of the JSON output.&lt;br /&gt;
# Adding an option to choose the output format (plain text or JSON) for each updated tool.&lt;br /&gt;
# Make the JSON structure introduced during the last GSoC more useful and consistent across tools.&lt;br /&gt;
# Developing Python test cases to ensure that the JSON output works correctly and to avoid future issues.&lt;br /&gt;
# Providing basic documentation and example JSON outputs for each modified tool.&lt;br /&gt;
# Adding support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
# Develop simple examples demonstrating how to use JSON output in a data science workflow, such as reading JSON data into pandas or python.&lt;br /&gt;
&lt;br /&gt;
= Timeline =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Period !! Timeline  !! Tasks   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period &lt;br /&gt;
||&lt;br /&gt;
May 8 - June 1  &lt;br /&gt;
|| &lt;br /&gt;
# Reviewed the work done during the last GSoC to stabilize the JSON output.&lt;br /&gt;
# Discussed the priority tools for adding JSON support.&lt;br /&gt;
# Read GRASS documentation to add Python and JSON examples to the documentation.&lt;br /&gt;
|| &lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;13&amp;quot; | Official Coding Period &lt;br /&gt;
|-&lt;br /&gt;
| '''Week 1''' (June 2 - June 8) || &lt;br /&gt;
# Add JSON support for g.mapset [https://github.com/OSGeo/grass/pull/5810 #5810]&lt;br /&gt;
# Fix uninitialized zone_value in r.univar [https://github.com/OSGeo/grass/pull/5821 #5821]&lt;br /&gt;
# Add JSON support for r.what.color [https://github.com/OSGeo/grass/pull/5822 #5822]&lt;br /&gt;
# Update test file in r.info [https://github.com/OSGeo/grass/pull/5842 #5842]&lt;br /&gt;
# Improve interface for r.info [https://github.com/OSGeo/grass/pull/5859 #5859]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 2''' (June 9 - June 15) ||&lt;br /&gt;
# Add JSON support for g.version [https://github.com/OSGeo/grass/pull/5863 #5863]&lt;br /&gt;
# Add JSON support for i.group [https://github.com/OSGeo/grass/pull/5870 #5870]&lt;br /&gt;
# Add test file in r.stats [https://github.com/OSGeo/grass/pull/5879 #5879]&lt;br /&gt;
# Add tests for JSON output in r.stats [https://github.com/OSGeo/grass/pull/5892 #5892]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 3''' (June 16 - June 22) ||&lt;br /&gt;
# Update the JSON output schema of v.distance [https://github.com/OSGeo/grass/pull/5898 #5898]&lt;br /&gt;
# Fix uninitialized window variable in r.stats [https://github.com/OSGeo/grass/pull/5900 #5900]&lt;br /&gt;
# Add test file in g.list [https://github.com/OSGeo/grass/pull/5906 #5906]&lt;br /&gt;
# Add JSON support for g.list [https://github.com/OSGeo/grass/pull/5921 #5921]&lt;br /&gt;
# Update the JSON output schema of g.region [https://github.com/OSGeo/grass/pull/5929 #5929]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 4''' (June 23 - June 29) ||&lt;br /&gt;
# Update the JSON output schema of v.to.db [https://github.com/OSGeo/grass/pull/5946 #5946]&lt;br /&gt;
# Update the JSON output schema of r.profile [https://github.com/OSGeo/grass/pull/5962 #5962]&lt;br /&gt;
# Add SHELL and CSV output support for r.univar [https://github.com/OSGeo/grass/pull/5966 #5966]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 5''' (June 30 - July 6) ||&lt;br /&gt;
# Add test file in r.regression.line [https://github.com/OSGeo/grass/pull/5990 #5990]&lt;br /&gt;
# Add JSON support for r.regression.line [https://github.com/OSGeo/grass/pull/5993 #5993]&lt;br /&gt;
# Add test file in r.stats.quantile [https://github.com/OSGeo/grass/pull/6002 #6002]&lt;br /&gt;
# Add JSON support for r.stats.quantile [https://github.com/OSGeo/grass/pull/6007 #6007]&lt;br /&gt;
# Add test file in r.volume [https://github.com/OSGeo/grass/pull/6027 #6027]&lt;br /&gt;
# Add JSON support for r.volume [https://github.com/OSGeo/grass/pull/6036 #6036]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 6''' (July 7 - July 13) ||&lt;br /&gt;
# Add JSON support for db.columns [https://github.com/OSGeo/grass/pull/6042 #6042]&lt;br /&gt;
# Add test file in m.measure [https://github.com/OSGeo/grass/pull/6051 #6051]&lt;br /&gt;
# Add test file in db.connect [https://github.com/OSGeo/grass/pull/6052 #6052]&lt;br /&gt;
# Add JSON support for m.measure [https://github.com/OSGeo/grass/pull/6053 #6053]&lt;br /&gt;
# Add JSON support for db.connect [https://github.com/OSGeo/grass/pull/6059 #6059]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | '''Week 7''' (July 14 - July 20) ||&lt;br /&gt;
# Add test file in r.regression.multi [https://github.com/OSGeo/grass/pull/6066 #6066]&lt;br /&gt;
# Add test file in v.db.connect [https://github.com/OSGeo/grass/pull/6067 #6067]&lt;br /&gt;
# Add JSON support for r.regression.multi [https://github.com/OSGeo/grass/pull/6075 #6075]&lt;br /&gt;
# Add JSON support for v.db.connect [https://github.com/OSGeo/grass/pull/6077 #6077]&lt;br /&gt;
# Submit MidTerm evaluation.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 8''' (July 21 - July 27) ||&lt;br /&gt;
# Add JSON support for g.findfile [https://github.com/OSGeo/grass/pull/6091 #6091]&lt;br /&gt;
# Add test file in r3.info [https://github.com/OSGeo/grass/pull/6098 #6098]&lt;br /&gt;
# Add JSON support for r3.info [https://github.com/OSGeo/grass/pull/6103 #6103]&lt;br /&gt;
# Add test file in v.what.rast [https://github.com/OSGeo/grass/pull/6109 #6109]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 9''' (July 28 - August 3) ||&lt;br /&gt;
# Update format to CSV instead of shell in v.category [https://github.com/OSGeo/grass/pull/6132 #6132]&lt;br /&gt;
# Add CSV output support to r.stats [https://github.com/OSGeo/grass/pull/6133 #6133]&lt;br /&gt;
# Add CSV headers to r.volume [https://github.com/OSGeo/grass/pull/6134 #6134]&lt;br /&gt;
# Add JSON support for v.what.rast [https://github.com/OSGeo/grass/pull/6140 #6140]&lt;br /&gt;
# Add CSV output support to r.profile [https://github.com/OSGeo/grass/pull/6145 #6145]&lt;br /&gt;
# Update test cases in r.distance [https://github.com/OSGeo/grass/pull/6150 #6150]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 10''' (August 4 - August 10) ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 11''' (August 11 - August 17) ||&lt;br /&gt;
# Add JSON and CSV support for r.distance [https://github.com/OSGeo/grass/pull/6204 #6204]&lt;br /&gt;
# Add more test cases in v.class [https://github.com/OSGeo/grass/pull/6205 #6205]&lt;br /&gt;
# Add JSON and CSV support for v.class [https://github.com/OSGeo/grass/pull/6210 #6210]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 12''' (August 18 - August 24) ||&lt;br /&gt;
# Update JSON output format for v.what [https://github.com/OSGeo/grass/pull/6252 #6252]&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Evaluation Period &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | August 25 - September 1 ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
# Submit code, final evaluation and write the final GSoC report.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Reports =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* Introduced myself on the [https://discourse.osgeo.org/t/gsoc-2025-introduction-nishant-bansal/147005 OSGeo Discourse mailing list].&lt;br /&gt;
* Created both my [https://wiki.osgeo.org/wiki/User:Nishantbansal2003 personal Wiki page] and the [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C project Wiki page], adding all necessary project-related information.&lt;br /&gt;
* Read GRASS documentation to support the addition of Python and JSON examples.&lt;br /&gt;
* Worked on the following pull requests:&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5688 #5688]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5773 #5773]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5775 #5775]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5784 #5784]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5785 #5785]&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to the g.mapset and r.what.color modules.&lt;br /&gt;
* If time permits, I will begin improving the r.info interface: [https://github.com/OSGeo/grass/issues/5793 Issue #5793]&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
'''Project Discussions and Meetings'''&lt;br /&gt;
* '''14 May 2025''': Introductory meeting discussing JSON support and overall project milestones.&lt;br /&gt;
* '''21 May 2025''': Introduction with fellow developers. Discussed priority tools, adding Python/Pandas examples, and approaches for finalizing the JSON schema for each module.&lt;br /&gt;
&lt;br /&gt;
== Week-1 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.mapset''': Added JSON output support, now you can use -p and -l flags to get JSON-formatted results.&lt;br /&gt;
* '''r.univar''': Fixed a bug causing an uninitialized zone_value.&lt;br /&gt;
* '''r.what.color''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5822 #5822])&lt;br /&gt;
* '''r.info (regression tests)''': To maintain backward compatibility while updating its interface, I added strong regression tests.&lt;br /&gt;
* '''r.info (interface improvements)''': Began improving the module’s interface. (See PR [https://github.com/OSGeo/grass/pull/5859 #5859])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.version (see issue [https://github.com/OSGeo/grass/issues/5816 #5816]).&lt;br /&gt;
* Add JSON output support to i.group (see issue [https://github.com/OSGeo/grass/issues/5815 #5815]).&lt;br /&gt;
* If time permits, write tests for r.stats (see issue [https://github.com/OSGeo/grass/issues/5814 #5814]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-2 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.version''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5863 #5863])&lt;br /&gt;
* '''i.group''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5870 #5870])&lt;br /&gt;
* '''r.stats (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats''': Added tests for JSON output; this uncovered a bug, which was fixed alongside.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.distance (see issue [https://github.com/OSGeo/grass/issues/5846 #5846]).&lt;br /&gt;
* Add JSON output support to g.list (see issue [https://github.com/OSGeo/grass/issues/5848 #5848]).&lt;br /&gt;
* If time permits, fix the JSON output format of g.region (see issue [https://github.com/OSGeo/grass/issues/5828 #5828]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-3 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.distance''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5898 #5898])&lt;br /&gt;
* '''r.stats''': Fixed a bug causing an uninitialized &amp;lt;code&amp;gt;window&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
* '''g.list (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''g.list''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5921 #5921])&lt;br /&gt;
* '''g.region''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5929 #5929])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.to.db (see issue [https://github.com/OSGeo/grass/pull/5711 #5711]).&lt;br /&gt;
* Update JSON output format and documentation of r.profile (see issue [https://github.com/OSGeo/grass/pull/5834 #5834]).&lt;br /&gt;
* If time permits, add shell and csv output formats to r.univar (see issue [https://github.com/OSGeo/grass/pull/5824 #5824]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-4 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.to.db''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5946 #5946])&lt;br /&gt;
* '''r.profile''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5962 #5962])&lt;br /&gt;
* '''r.univar''': Implemented SHELL and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/5966 #5966])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.regression.line (see issue [https://github.com/OSGeo/grass/pull/5950 #5950]).&lt;br /&gt;
* Add JSON output support to r.stats.quantile (see issue [https://github.com/OSGeo/grass/pull/5951 #5951]).&lt;br /&gt;
* Add JSON output support to r.volume (see issue [https://github.com/OSGeo/grass/pull/5949 #5949]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-5 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.line (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.line''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5993 #5993])&lt;br /&gt;
* '''r.stats.quantile (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats.quantile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6007 #6007])&lt;br /&gt;
* '''r.volume (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.volume''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6036 #6036])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to m.measure (see issue [https://github.com/OSGeo/grass/pull/6006 #6006]).&lt;br /&gt;
* Add JSON output support to db.columns (see issue [https://github.com/OSGeo/grass/pull/6008 #6008]).&lt;br /&gt;
* Add JSON output support to db.connect (see issue [https://github.com/OSGeo/grass/pull/6009 #6009]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-6 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''db.columns''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6042 #6042])&lt;br /&gt;
* '''m.measure (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''m.measure''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6053 #6053])&lt;br /&gt;
* '''db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6059 #6059])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to v.db.connect (see issue [https://github.com/OSGeo/grass/pull/6014 #6014]).&lt;br /&gt;
* Add JSON output support to r.regression.multi (see issue [https://github.com/OSGeo/grass/pull/6010 #6010]).&lt;br /&gt;
* If time permits, add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* If time permits, add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-7 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.multi (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''v.db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.multi''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6075 #6075])&lt;br /&gt;
* '''v.db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6077 #6077])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* Add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
* If time permits, add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-8 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.findfile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6091 #6091])&lt;br /&gt;
* '''r3.info (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a flag-handling bug.&lt;br /&gt;
* '''r3.info''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6103 #6103])&lt;br /&gt;
* '''v.what.rast (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a sorting bug.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
* Update format to CSV instead of shell in v.category (see issue [https://github.com/OSGeo/grass/pull/6025 #6025]).&lt;br /&gt;
* Add CSV output support to r.stats (see issue [https://github.com/OSGeo/grass/issues/5835 #5835]).&lt;br /&gt;
* If time permits, add CSV output support to r.profile (see issue [https://github.com/OSGeo/grass/issues/5958 #5958]).&lt;br /&gt;
* If time permits, add CSV headers to r.volume (see issue [https://github.com/OSGeo/grass/issues/6049 #6049]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I don’t have any blockers this week. However, I’ll be a little busy with some personal work from August 3 to August 10, so I’ll try to complete next week’s tasks this week itself.&lt;br /&gt;
&lt;br /&gt;
== Week-9 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.category''': Updated format to CSV instead of shell. (See PR [https://github.com/OSGeo/grass/pull/6132 #6132])&lt;br /&gt;
* '''r.stats''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6133 #6133])&lt;br /&gt;
* '''r.volume''': Implemented CSV column headers support. (See PR [https://github.com/OSGeo/grass/pull/6134 #6134])&lt;br /&gt;
* '''v.what.rast''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6140 #6140])&lt;br /&gt;
* '''r.profile''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6145 #6145])&lt;br /&gt;
* '''r.distance (regression tests)''': Updated regression tests to ensure backward compatibility with new JSON support. (See PR [https://github.com/OSGeo/grass/pull/6150 #6150])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* I’ll be a bit busy with some personal work from August 3 to 10, so I completed next week’s tasks last week itself. I’ve already informed my mentors about my limited availability.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* Yes, I’ll be a bit busy with some personal work from August 3 to 10.&lt;br /&gt;
&lt;br /&gt;
== Week-10 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* This week I was busy with some personal work, so I did not complete any additional tasks. However, I had already finished this week’s tasks last week. This week, I mostly focused on handling reviews for those PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.distance (see issue [https://github.com/OSGeo/grass/issues/6135 #6135]).&lt;br /&gt;
* Add JSON output support to v.class (see issue [https://github.com/OSGeo/grass/issues/6136 #6136]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-11 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.distance''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6204 #6204])&lt;br /&gt;
* '''v.class''': Updated regression tests to ensure backward compatibility with new JSON support and fixed a out-of-bounds bug. (See PR [https://github.com/OSGeo/grass/pull/6205 #6205])&lt;br /&gt;
* '''v.class''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6210 #6210])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Discuss next week’s tasks with my mentors, if no issues are assigned, I’ll identify tools that currently lack JSON support and evaluate which ones are feasible to add it to.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-12 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.what''': Update JSON output format. (See PR [https://github.com/OSGeo/grass/pull/6252 #6252])&lt;br /&gt;
* Addressed review comments on my open PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
= Final Report =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Title''' || Add JSON output to different tools in C for GRASS&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo (Open Source Geospatial Foundation)]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''Program''' || Google Summer of Code 2025&lt;br /&gt;
|-&lt;br /&gt;
| '''Contributions''' || [https://github.com/OSGeo/grass/pulls?q=is%3Apr+author%3ANishantBansal2003+ Pull Requests]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
During my GSoC project, I addressed the challenge that most GRASS tools produced only plain text output, forcing users to write custom parsing code for Python-based workflows. The task was to make these tools more data-science friendly by adding structured output formats. To achieve this, I extended the use of the Parson library to implement consistent JSON output across multiple modules, refined the JSON structure introduced in the previous GSoC, and added optional support for SHELL and CSV outputs where appropriate. I developed comprehensive Python test cases, ensured backward compatibility, and provided documentation with practical examples such as loading JSON into pandas. As a result, GRASS users can now directly consume structured outputs in modern workflows, reducing parsing overhead, improving interoperability, and paving the way for broader adoption of GRASS in data science contexts.&lt;br /&gt;
&lt;br /&gt;
== The state of integration BEFORE the start of GSoC ==&lt;br /&gt;
Before the start of GSoC, the integration of GRASS with data science workflows was limited due to several challenges. The JSON outputs introduced in the previous GSoC contained deeply nested hierarchies, making them difficult to use directly with libraries such as '''pandas''' or in broader data science pipelines. While some tools already supported JSON (e.g., &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;), many important and highly demanded modules lacked JSON support, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt; and many more. This lack of consistency limited the seamless adoption of GRASS in analytics and machine learning contexts. Moreover, there was no clear '''documentation of the JSON schema''' or guidance on how to parse and utilize these outputs effectively in '''python or pandas''', which made it difficult for users to understand the use cases and integrate GRASS outputs into modern data science workflows.&lt;br /&gt;
&lt;br /&gt;
== The state of integration AFTER GSoC ==&lt;br /&gt;
&lt;br /&gt;
After GSoC, the integration state of JSON and alternative output formats in GRASS has significantly improved. I refactored the JSON structures for tools such as &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;, and others, removing unnecessary nesting introduced during the previous GSoC. This makes their outputs much easier to consume directly in &amp;lt;b&amp;gt;Python&amp;lt;/b&amp;gt; or with &amp;lt;b&amp;gt;pandas&amp;lt;/b&amp;gt;. In addition, JSON support has been extended to many essential and frequently used modules, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;, and many more. I also added detailed documentation of the JSON schema and provided examples showing how to parse and use these outputs effectively with Python and pandas. Together, these improvements make the adoption of GRASS in modern &amp;lt;b&amp;gt;data science workflows&amp;lt;/b&amp;gt; far more seamless and accessible.&lt;br /&gt;
&lt;br /&gt;
=== Enhancements made per tool ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;: Simplified JSON structure for univariate statistics, removed unnecessary hierarchy, and added new output format options (CSV, shell).&lt;br /&gt;
* &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;: Added JSON support for querying raster map colors, with a Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;: Added JSON support for reporting the current mapset, with a Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;: Updated JSON structure for raster map metadata, removing hierarchy for easier parsing. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;: Simplified JSON output for geographic region boundaries, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;: Added JSON support for GRASS version information, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;: Added JSON support for listing imagery groups, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;: Added JSON and CSV support for raster area statistics, with Python and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;: Refined JSON schema for nearest element queries, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;: Added JSON support for listing GRASS database files, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;: Updated JSON schema for printing vector attribute values, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;: Simplified JSON output, added CSV support, and included a matplotlib example for profile visualization.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;: Updated JSON schema for linear regression between rasters, with Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;: Updated JSON schema for category quantiles, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;: Added JSON support for raster volume calculations, fixed missing headers in CSV output, and provided pandas examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.columns&amp;lt;/code&amp;gt;: Added JSON output for listing database table columns, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;: Added JSON output for measuring lengths and areas, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.connect&amp;lt;/code&amp;gt;: Added JSON output for DB connection info, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.multi&amp;lt;/code&amp;gt;: Added JSON output for multiple regression between rasters, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.db.connect&amp;lt;/code&amp;gt;: Added JSON output for vector map attribute connections, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.findfile&amp;lt;/code&amp;gt;: Added JSON output for GRASS database file search, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;: Added JSON output for 3D raster map info, with Python example. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;: Added JSON output for extracting raster values at vector points, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt;: Added JSON and CSV support for locating closest points between raster objects, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;: Added JSON and CSV support for attribute data, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;: Migrated from manually written JSON to Parson-based JSON output, simplified schema, and provided Python parsing examples.&lt;br /&gt;
&lt;br /&gt;
All these changes were accompanied by regression tests to ensure that new JSON/CSV/SHELL/PLAIN output options do not break existing functionality. Additionally, I introduced comprehensive Python test cases for these outputs, making the enhancements reliable and future-proof. During this work, I also fixed several bugs in modules such as &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;, strengthening the stability of GRASS as a whole.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
To sum up, I’m glad to have met the three core objectives of my project with the constant support of my mentors:&lt;br /&gt;
&lt;br /&gt;
* Brought JSON output to several important and long-requested modules, added regression tests, and ensured reliable future test coverage.&lt;br /&gt;
* Enhanced the JSON schema introduced in last year’s GSoC by reducing unnecessary hierarchy, making it more consistent across tools, and providing Python/Pandas examples for practical use.&lt;br /&gt;
* Expanded &amp;lt;b&amp;gt;CSV&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;SHELL&amp;lt;/b&amp;gt; output formats to additional tools where they could bring value.&lt;br /&gt;
&lt;br /&gt;
This journey has been both rewarding and educational, and I’m grateful for the opportunity to contribute to GRASS through GSoC 2025. I especially want to thank &amp;lt;b&amp;gt;Anna Petrasova&amp;lt;/b&amp;gt; and the GRASS Development Team for their guidance and support. I’m excited to keep building on this work and further extend JSON and other features in the future.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
There is significant scope to extend structured output support across GRASS tools. In particular, future efforts should focus on:&lt;br /&gt;
* Expanding JSON output to additional modules, with details tracked here: [https://github.com/orgs/OSGeo/projects/10 GRASS JSON Outputs Project].&lt;br /&gt;
* Refining and standardizing the JSON schema to better support complex workflows and integrations.&lt;br /&gt;
* Exploring and implementing other output formats (e.g., SHELL, CSV, PLAIN) where they can improve usability and automation.&lt;br /&gt;
I also plan to continue contributing to GRASS by extending JSON support to more modules and engaging in community discussions around schema design and format integration.&lt;br /&gt;
&lt;br /&gt;
== Log of Pull Requests ==&lt;br /&gt;
Below is a list of pull requests submitted to the GRASS repository during GSoC 2025:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pull Request !! Description  !! Date   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5688 #5688] || r.univar: Fix JSON structure || May 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5773 #5773] || r.what.color: Add test file || May 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5775 #5775] || g.mapset: Add test file || May 26, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5784 #5784] || r.info: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;Closed&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5785 #5785] || g.region: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5810 #5810] || g.mapset: Add JSON support || June 2, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5821 #5821] || r.univar: Fix uninitialized zone_value || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5822 #5822] || r.what.color: Add JSON support || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5842 #5842] || r.info: Update test file || June 5, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5859 #5859] || r.info: Improve interface || June 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5863 #5863] || g.version: Add JSON support || June 9, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5870 #5870] || i.group: Add JSON support || June 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5879 #5879] || r.stats: Add test file || June 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5892 #5892] || r.stats: Add tests for JSON output || June 14, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5898 #5898] || v.distance: Update JSON format || June 16, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5900 #5900] || r.stats: fix uninitialised window value || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5906 #5906] || g.list: Add test file || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5921 #5921] || g.list: Add JSON support || June 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5929 #5929] || g.region: Update JSON format || June 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5946 #5946] || v.to.db: Update JSON format || June 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5962 #5962] || r.profile: Update JSON format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5966 #5966] || r.univar: Add shell and CSV format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5990 #5990] || r.regression.line: Add test file || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5993 #5993] || r.regression.line: Add JSON support || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6002 #6002] || r.stats.quantile: Add test file || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6007 #6007] || r.stats.quantile: Add JSON support || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6027 #6027] || r.volume: Add test file || July 4, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6036 #6036] || r.volume: Add JSON support || July 6, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6042 #6042] || db.columns: Add JSON support || July 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6051 #6051] || m.measure: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6052 #6052] || db.connect: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6053 #6053] || m.measure: Add JSON support || July 11, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6059 #6059] || db.connect: Add JSON support || July 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6066 #6066] || r.regression.multi: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6067 #6067] || v.db.connect: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6075 #6075] || r.regression.multi: Add JSON support || July 18, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6077 #6077] || v.db.connect: Add JSON support || July 19, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6091 #6091] || g.findfile: Add JSON support || July 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6098 #6098] || r3.info: Add test file || July 22, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6103 #6103] || r3.info: Add JSON support || July 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6109 #6109] || v.what.rast: Add test file || July 24, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6132 #6132] || v.category: Use CSV format instead of shell format || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6133 #6133] || r.stats: add CSV support || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6134 #6134] || r.volume: add csv column headers || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6140 #6140] || v.what.rast: Add JSON support || July 29, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6145 #6145] || r.profile: Add CSV support || July 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6150 #6150] || r.distance: Update existing test cases || August 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6204 #6204] || r.distance: Add JSON and CSV support || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6205 #6205] || v.class: Add more test cases and fix out-of-bounds bug || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6210 #6210] || v.class: Add JSON and CSV support || August 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6252 #6252] || v.what: Update JSON output format || August 23, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Additional Links ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Ttile&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| OSGeo Wiki Page&lt;br /&gt;
| [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C Add JSON output to different tools in C for GRASS]&lt;br /&gt;
|-&lt;br /&gt;
| Github Fork&lt;br /&gt;
| [https://github.com/NishantBansal2003/grass GitHub Fork]&lt;br /&gt;
|-&lt;br /&gt;
| GSoC Page&lt;br /&gt;
| [https://summerofcode.withgoogle.com/programs/2025/projects/GPVGd3DH Link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples &amp;amp; Images ==&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; JSON output in Python ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; can be directly loaded into a pandas DataFrame and used for plotting with matplotlib.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
# Run r.profile command&lt;br /&gt;
elevation = gs.read_command(&lt;br /&gt;
    &amp;quot;r.profile&amp;quot;,&lt;br /&gt;
    input=&amp;quot;elevation&amp;quot;,&lt;br /&gt;
    coordinates=&amp;quot;641712,226095,641546,224138,641546,222048,641049,221186&amp;quot;,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
    flags=&amp;quot;gc&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Load the JSON data into a dataframe&lt;br /&gt;
df = pd.read_json(elevation)&lt;br /&gt;
print(df)&lt;br /&gt;
&lt;br /&gt;
# Create the scatter plot&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
plt.scatter(df[&amp;quot;distance&amp;quot;], df[&amp;quot;value&amp;quot;], c=df[&amp;quot;color&amp;quot;], marker=&amp;quot;o&amp;quot;)&lt;br /&gt;
plt.title(&amp;quot;Profile of Distance vs. Elevation with Color Coding&amp;quot;)&lt;br /&gt;
plt.xlabel(&amp;quot;Distance (meters)&amp;quot;)&lt;br /&gt;
plt.ylabel(&amp;quot;Elevation&amp;quot;)&lt;br /&gt;
plt.grid(True)&lt;br /&gt;
plt.show()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame Output (first 10 rows) ====  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
         easting       northing   distance      value    color&lt;br /&gt;
0  641712.000000  226095.000000   0.000000  84.661507  #71FF00&lt;br /&gt;
1  641711.154826  226085.036106   9.999675  84.511765  #6FFF00&lt;br /&gt;
2  641710.309651  226075.072213  19.999349  84.241806  #6BFF00&lt;br /&gt;
3  641709.464477  226065.108319  29.999024  84.304214  #6CFF00&lt;br /&gt;
4  641708.619302  226055.144426  39.998699  84.174400  #6AFF00&lt;br /&gt;
5  641707.774128  226045.180532  49.998374  84.112534  #6AFF00&lt;br /&gt;
6  641706.928954  226035.216639  59.998048  84.011208  #68FF00&lt;br /&gt;
7  641706.083779  226025.252745  69.997723  83.834084  #66FF00&lt;br /&gt;
8  641705.238605  226015.288851  79.997398  83.870193  #67FF00&lt;br /&gt;
9  641704.393430  226005.324958  89.997073  84.194908  #6BFF00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Visualization ====  &lt;br /&gt;
&lt;br /&gt;
Matplotlib scatter plot generated from the &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; JSON output: &lt;br /&gt;
&lt;br /&gt;
[[File:R profile plot.png]]&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt; can be directly loaded into a pandas DataFrame.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.class&amp;quot;,&lt;br /&gt;
    map=&amp;quot;bridges&amp;quot;,&lt;br /&gt;
    column=&amp;quot;YEAR_BUILT&amp;quot;,&lt;br /&gt;
    algorithm=&amp;quot;std&amp;quot;,&lt;br /&gt;
    nbclasses=5,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data[&amp;quot;intervals&amp;quot;])&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output (intervals) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
          from           to  frequency&lt;br /&gt;
0  1891.000000  1938.829689        750&lt;br /&gt;
1  1938.829689  1954.722836       1841&lt;br /&gt;
2  1954.722836  1970.615983       5556&lt;br /&gt;
3  1970.615983  1986.509130       1788&lt;br /&gt;
4  1986.509130  1997.000000       1003&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame to display categories and values.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.what.rast&amp;quot;, map=&amp;quot;bridges&amp;quot;, raster=&amp;quot;elevation&amp;quot;, flags=&amp;quot;p&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    category       value&lt;br /&gt;
0       4635   86.851212&lt;br /&gt;
1       4648   87.883255&lt;br /&gt;
2       4688  103.382004&lt;br /&gt;
3       4709   67.387856&lt;br /&gt;
4       4986   90.972832&lt;br /&gt;
5       4991   86.550629&lt;br /&gt;
6       5027   84.256355&lt;br /&gt;
7       5060   79.500443&lt;br /&gt;
8       5071   78.732864&lt;br /&gt;
9       5089   85.703636&lt;br /&gt;
10      5096  115.967323&lt;br /&gt;
11      5130   81.055870&lt;br /&gt;
12      5150   92.812927&lt;br /&gt;
13      5166   88.149483&lt;br /&gt;
14      5184   76.426331&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame to locate closest points.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
&lt;br /&gt;
result = gs.parse_command(&lt;br /&gt;
    &amp;quot;r.distance&amp;quot;, map=[&amp;quot;zipcodes&amp;quot;, &amp;quot;lakes&amp;quot;], flags=&amp;quot;l&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
df = pd.json_normalize(result)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output (truncated) ====&lt;br /&gt;
&amp;lt;div style=&amp;quot;overflow-x:auto;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
        distance  from_cell.category  from_cell.easting  from_cell.northing from_cell.label  to_cell.category  to_cell.easting  to_cell.northing to_cell.label&lt;br /&gt;
0   11158.870911               27511             632605              223295            CARY             34300           640585            215495      Dam/Weir&lt;br /&gt;
1    1037.304198               27511             631735              222695            CARY             39000           632315            221835     Lake/Pond&lt;br /&gt;
2    2277.059507               27511             630015              221605            CARY             43600           630765            219455     Reservoir&lt;br /&gt;
..           ...                 ...                ...                 ...             ...               ...              ...               ...           ...&lt;br /&gt;
36   4922.600939               27610             642975              219815         RALEIGH             34300           640615            215495      Dam/Weir&lt;br /&gt;
37     50.000000               27610             642655              222765         RALEIGH             39000           642705            222765     Lake/Pond&lt;br /&gt;
38  11368.069317               27610             642305              220945         RALEIGH             43600           631035            219455     Reservoir&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{GSoC}}&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28668</id>
		<title>GRASS GSoC 2025 Add JSON output to different tools in C</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28668"/>
		<updated>2025-08-24T07:07:32Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: /* Examples &amp;amp; Images */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Nishant Bansal&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo - Open Source Geospatial Foundation]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/NishantBansal2003/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''GSoC proposal''' || [https://docs.google.com/document/d/1ZPQ9RXU7b_RUDmBmAMeK7ZjFAV1WC7Urd1Zlz678jyw/edit?tab=t.0#heading=h.z6ne0og04bp5 View Proposal]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Abstract =&lt;br /&gt;
Currently, most GRASS tools produce data in plain text by default. This means that users who want to process the output in Python need to create custom parsing code. To make this easier, several modules could be improved by oﬀering JSON as an alternative output format. Recently, the Parson library was added to the GRASS codebase to support JSON output in addition to plain text. Building on the advancements made during the last GSoC, my project aims to expand JSON output capabilities to more tools using the Parson library. I will also work on making the JSON structure introduced in the previous GSoC more useful and consistent. Additionally, I plan to add support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
&lt;br /&gt;
# Working with mentors to finalize the structure of the JSON output.&lt;br /&gt;
# Adding an option to choose the output format (plain text or JSON) for each updated tool.&lt;br /&gt;
# Make the JSON structure introduced during the last GSoC more useful and consistent across tools.&lt;br /&gt;
# Developing Python test cases to ensure that the JSON output works correctly and to avoid future issues.&lt;br /&gt;
# Providing basic documentation and example JSON outputs for each modified tool.&lt;br /&gt;
# Adding support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
# Develop simple examples demonstrating how to use JSON output in a data science workflow, such as reading JSON data into pandas or python.&lt;br /&gt;
&lt;br /&gt;
= Timeline =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Period !! Timeline  !! Tasks   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period &lt;br /&gt;
||&lt;br /&gt;
May 8 - June 1  &lt;br /&gt;
|| &lt;br /&gt;
# Reviewed the work done during the last GSoC to stabilize the JSON output.&lt;br /&gt;
# Discussed the priority tools for adding JSON support.&lt;br /&gt;
# Read GRASS documentation to add Python and JSON examples to the documentation.&lt;br /&gt;
|| &lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;13&amp;quot; | Official Coding Period &lt;br /&gt;
|-&lt;br /&gt;
| '''Week 1''' (June 2 - June 8) || &lt;br /&gt;
# Add JSON support for g.mapset [https://github.com/OSGeo/grass/pull/5810 #5810]&lt;br /&gt;
# Fix uninitialized zone_value in r.univar [https://github.com/OSGeo/grass/pull/5821 #5821]&lt;br /&gt;
# Add JSON support for r.what.color [https://github.com/OSGeo/grass/pull/5822 #5822]&lt;br /&gt;
# Update test file in r.info [https://github.com/OSGeo/grass/pull/5842 #5842]&lt;br /&gt;
# Improve interface for r.info [https://github.com/OSGeo/grass/pull/5859 #5859]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 2''' (June 9 - June 15) ||&lt;br /&gt;
# Add JSON support for g.version [https://github.com/OSGeo/grass/pull/5863 #5863]&lt;br /&gt;
# Add JSON support for i.group [https://github.com/OSGeo/grass/pull/5870 #5870]&lt;br /&gt;
# Add test file in r.stats [https://github.com/OSGeo/grass/pull/5879 #5879]&lt;br /&gt;
# Add tests for JSON output in r.stats [https://github.com/OSGeo/grass/pull/5892 #5892]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 3''' (June 16 - June 22) ||&lt;br /&gt;
# Update the JSON output schema of v.distance [https://github.com/OSGeo/grass/pull/5898 #5898]&lt;br /&gt;
# Fix uninitialized window variable in r.stats [https://github.com/OSGeo/grass/pull/5900 #5900]&lt;br /&gt;
# Add test file in g.list [https://github.com/OSGeo/grass/pull/5906 #5906]&lt;br /&gt;
# Add JSON support for g.list [https://github.com/OSGeo/grass/pull/5921 #5921]&lt;br /&gt;
# Update the JSON output schema of g.region [https://github.com/OSGeo/grass/pull/5929 #5929]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 4''' (June 23 - June 29) ||&lt;br /&gt;
# Update the JSON output schema of v.to.db [https://github.com/OSGeo/grass/pull/5946 #5946]&lt;br /&gt;
# Update the JSON output schema of r.profile [https://github.com/OSGeo/grass/pull/5962 #5962]&lt;br /&gt;
# Add SHELL and CSV output support for r.univar [https://github.com/OSGeo/grass/pull/5966 #5966]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 5''' (June 30 - July 6) ||&lt;br /&gt;
# Add test file in r.regression.line [https://github.com/OSGeo/grass/pull/5990 #5990]&lt;br /&gt;
# Add JSON support for r.regression.line [https://github.com/OSGeo/grass/pull/5993 #5993]&lt;br /&gt;
# Add test file in r.stats.quantile [https://github.com/OSGeo/grass/pull/6002 #6002]&lt;br /&gt;
# Add JSON support for r.stats.quantile [https://github.com/OSGeo/grass/pull/6007 #6007]&lt;br /&gt;
# Add test file in r.volume [https://github.com/OSGeo/grass/pull/6027 #6027]&lt;br /&gt;
# Add JSON support for r.volume [https://github.com/OSGeo/grass/pull/6036 #6036]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 6''' (July 7 - July 13) ||&lt;br /&gt;
# Add JSON support for db.columns [https://github.com/OSGeo/grass/pull/6042 #6042]&lt;br /&gt;
# Add test file in m.measure [https://github.com/OSGeo/grass/pull/6051 #6051]&lt;br /&gt;
# Add test file in db.connect [https://github.com/OSGeo/grass/pull/6052 #6052]&lt;br /&gt;
# Add JSON support for m.measure [https://github.com/OSGeo/grass/pull/6053 #6053]&lt;br /&gt;
# Add JSON support for db.connect [https://github.com/OSGeo/grass/pull/6059 #6059]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | '''Week 7''' (July 14 - July 20) ||&lt;br /&gt;
# Add test file in r.regression.multi [https://github.com/OSGeo/grass/pull/6066 #6066]&lt;br /&gt;
# Add test file in v.db.connect [https://github.com/OSGeo/grass/pull/6067 #6067]&lt;br /&gt;
# Add JSON support for r.regression.multi [https://github.com/OSGeo/grass/pull/6075 #6075]&lt;br /&gt;
# Add JSON support for v.db.connect [https://github.com/OSGeo/grass/pull/6077 #6077]&lt;br /&gt;
# Submit MidTerm evaluation.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 8''' (July 21 - July 27) ||&lt;br /&gt;
# Add JSON support for g.findfile [https://github.com/OSGeo/grass/pull/6091 #6091]&lt;br /&gt;
# Add test file in r3.info [https://github.com/OSGeo/grass/pull/6098 #6098]&lt;br /&gt;
# Add JSON support for r3.info [https://github.com/OSGeo/grass/pull/6103 #6103]&lt;br /&gt;
# Add test file in v.what.rast [https://github.com/OSGeo/grass/pull/6109 #6109]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 9''' (July 28 - August 3) ||&lt;br /&gt;
# Update format to CSV instead of shell in v.category [https://github.com/OSGeo/grass/pull/6132 #6132]&lt;br /&gt;
# Add CSV output support to r.stats [https://github.com/OSGeo/grass/pull/6133 #6133]&lt;br /&gt;
# Add CSV headers to r.volume [https://github.com/OSGeo/grass/pull/6134 #6134]&lt;br /&gt;
# Add JSON support for v.what.rast [https://github.com/OSGeo/grass/pull/6140 #6140]&lt;br /&gt;
# Add CSV output support to r.profile [https://github.com/OSGeo/grass/pull/6145 #6145]&lt;br /&gt;
# Update test cases in r.distance [https://github.com/OSGeo/grass/pull/6150 #6150]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 10''' (August 4 - August 10) ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 11''' (August 11 - August 17) ||&lt;br /&gt;
# Add JSON and CSV support for r.distance [https://github.com/OSGeo/grass/pull/6204 #6204]&lt;br /&gt;
# Add more test cases in v.class [https://github.com/OSGeo/grass/pull/6205 #6205]&lt;br /&gt;
# Add JSON and CSV support for v.class [https://github.com/OSGeo/grass/pull/6210 #6210]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 12''' (August 18 - August 24) ||&lt;br /&gt;
# Update JSON output format for v.what [https://github.com/OSGeo/grass/pull/6252 #6252]&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Evaluation Period &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | August 25 - September 1 ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
# Submit code, final evaluation and write the final GSoC report.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Reports =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* Introduced myself on the [https://discourse.osgeo.org/t/gsoc-2025-introduction-nishant-bansal/147005 OSGeo Discourse mailing list].&lt;br /&gt;
* Created both my [https://wiki.osgeo.org/wiki/User:Nishantbansal2003 personal Wiki page] and the [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C project Wiki page], adding all necessary project-related information.&lt;br /&gt;
* Read GRASS documentation to support the addition of Python and JSON examples.&lt;br /&gt;
* Worked on the following pull requests:&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5688 #5688]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5773 #5773]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5775 #5775]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5784 #5784]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5785 #5785]&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to the g.mapset and r.what.color modules.&lt;br /&gt;
* If time permits, I will begin improving the r.info interface: [https://github.com/OSGeo/grass/issues/5793 Issue #5793]&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
'''Project Discussions and Meetings'''&lt;br /&gt;
* '''14 May 2025''': Introductory meeting discussing JSON support and overall project milestones.&lt;br /&gt;
* '''21 May 2025''': Introduction with fellow developers. Discussed priority tools, adding Python/Pandas examples, and approaches for finalizing the JSON schema for each module.&lt;br /&gt;
&lt;br /&gt;
== Week-1 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.mapset''': Added JSON output support, now you can use -p and -l flags to get JSON-formatted results.&lt;br /&gt;
* '''r.univar''': Fixed a bug causing an uninitialized zone_value.&lt;br /&gt;
* '''r.what.color''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5822 #5822])&lt;br /&gt;
* '''r.info (regression tests)''': To maintain backward compatibility while updating its interface, I added strong regression tests.&lt;br /&gt;
* '''r.info (interface improvements)''': Began improving the module’s interface. (See PR [https://github.com/OSGeo/grass/pull/5859 #5859])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.version (see issue [https://github.com/OSGeo/grass/issues/5816 #5816]).&lt;br /&gt;
* Add JSON output support to i.group (see issue [https://github.com/OSGeo/grass/issues/5815 #5815]).&lt;br /&gt;
* If time permits, write tests for r.stats (see issue [https://github.com/OSGeo/grass/issues/5814 #5814]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-2 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.version''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5863 #5863])&lt;br /&gt;
* '''i.group''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5870 #5870])&lt;br /&gt;
* '''r.stats (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats''': Added tests for JSON output; this uncovered a bug, which was fixed alongside.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.distance (see issue [https://github.com/OSGeo/grass/issues/5846 #5846]).&lt;br /&gt;
* Add JSON output support to g.list (see issue [https://github.com/OSGeo/grass/issues/5848 #5848]).&lt;br /&gt;
* If time permits, fix the JSON output format of g.region (see issue [https://github.com/OSGeo/grass/issues/5828 #5828]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-3 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.distance''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5898 #5898])&lt;br /&gt;
* '''r.stats''': Fixed a bug causing an uninitialized &amp;lt;code&amp;gt;window&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
* '''g.list (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''g.list''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5921 #5921])&lt;br /&gt;
* '''g.region''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5929 #5929])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.to.db (see issue [https://github.com/OSGeo/grass/pull/5711 #5711]).&lt;br /&gt;
* Update JSON output format and documentation of r.profile (see issue [https://github.com/OSGeo/grass/pull/5834 #5834]).&lt;br /&gt;
* If time permits, add shell and csv output formats to r.univar (see issue [https://github.com/OSGeo/grass/pull/5824 #5824]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-4 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.to.db''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5946 #5946])&lt;br /&gt;
* '''r.profile''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5962 #5962])&lt;br /&gt;
* '''r.univar''': Implemented SHELL and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/5966 #5966])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.regression.line (see issue [https://github.com/OSGeo/grass/pull/5950 #5950]).&lt;br /&gt;
* Add JSON output support to r.stats.quantile (see issue [https://github.com/OSGeo/grass/pull/5951 #5951]).&lt;br /&gt;
* Add JSON output support to r.volume (see issue [https://github.com/OSGeo/grass/pull/5949 #5949]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-5 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.line (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.line''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5993 #5993])&lt;br /&gt;
* '''r.stats.quantile (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats.quantile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6007 #6007])&lt;br /&gt;
* '''r.volume (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.volume''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6036 #6036])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to m.measure (see issue [https://github.com/OSGeo/grass/pull/6006 #6006]).&lt;br /&gt;
* Add JSON output support to db.columns (see issue [https://github.com/OSGeo/grass/pull/6008 #6008]).&lt;br /&gt;
* Add JSON output support to db.connect (see issue [https://github.com/OSGeo/grass/pull/6009 #6009]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-6 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''db.columns''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6042 #6042])&lt;br /&gt;
* '''m.measure (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''m.measure''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6053 #6053])&lt;br /&gt;
* '''db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6059 #6059])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to v.db.connect (see issue [https://github.com/OSGeo/grass/pull/6014 #6014]).&lt;br /&gt;
* Add JSON output support to r.regression.multi (see issue [https://github.com/OSGeo/grass/pull/6010 #6010]).&lt;br /&gt;
* If time permits, add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* If time permits, add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-7 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.multi (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''v.db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.multi''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6075 #6075])&lt;br /&gt;
* '''v.db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6077 #6077])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* Add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
* If time permits, add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-8 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.findfile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6091 #6091])&lt;br /&gt;
* '''r3.info (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a flag-handling bug.&lt;br /&gt;
* '''r3.info''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6103 #6103])&lt;br /&gt;
* '''v.what.rast (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a sorting bug.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
* Update format to CSV instead of shell in v.category (see issue [https://github.com/OSGeo/grass/pull/6025 #6025]).&lt;br /&gt;
* Add CSV output support to r.stats (see issue [https://github.com/OSGeo/grass/issues/5835 #5835]).&lt;br /&gt;
* If time permits, add CSV output support to r.profile (see issue [https://github.com/OSGeo/grass/issues/5958 #5958]).&lt;br /&gt;
* If time permits, add CSV headers to r.volume (see issue [https://github.com/OSGeo/grass/issues/6049 #6049]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I don’t have any blockers this week. However, I’ll be a little busy with some personal work from August 3 to August 10, so I’ll try to complete next week’s tasks this week itself.&lt;br /&gt;
&lt;br /&gt;
== Week-9 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.category''': Updated format to CSV instead of shell. (See PR [https://github.com/OSGeo/grass/pull/6132 #6132])&lt;br /&gt;
* '''r.stats''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6133 #6133])&lt;br /&gt;
* '''r.volume''': Implemented CSV column headers support. (See PR [https://github.com/OSGeo/grass/pull/6134 #6134])&lt;br /&gt;
* '''v.what.rast''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6140 #6140])&lt;br /&gt;
* '''r.profile''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6145 #6145])&lt;br /&gt;
* '''r.distance (regression tests)''': Updated regression tests to ensure backward compatibility with new JSON support. (See PR [https://github.com/OSGeo/grass/pull/6150 #6150])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* I’ll be a bit busy with some personal work from August 3 to 10, so I completed next week’s tasks last week itself. I’ve already informed my mentors about my limited availability.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* Yes, I’ll be a bit busy with some personal work from August 3 to 10.&lt;br /&gt;
&lt;br /&gt;
== Week-10 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* This week I was busy with some personal work, so I did not complete any additional tasks. However, I had already finished this week’s tasks last week. This week, I mostly focused on handling reviews for those PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.distance (see issue [https://github.com/OSGeo/grass/issues/6135 #6135]).&lt;br /&gt;
* Add JSON output support to v.class (see issue [https://github.com/OSGeo/grass/issues/6136 #6136]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-11 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.distance''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6204 #6204])&lt;br /&gt;
* '''v.class''': Updated regression tests to ensure backward compatibility with new JSON support and fixed a out-of-bounds bug. (See PR [https://github.com/OSGeo/grass/pull/6205 #6205])&lt;br /&gt;
* '''v.class''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6210 #6210])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Discuss next week’s tasks with my mentors, if no issues are assigned, I’ll identify tools that currently lack JSON support and evaluate which ones are feasible to add it to.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-12 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.what''': Update JSON output format. (See PR [https://github.com/OSGeo/grass/pull/6252 #6252])&lt;br /&gt;
* Addressed review comments on my open PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
= Final Report =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Title''' || Add JSON output to different tools in C for GRASS&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo (Open Source Geospatial Foundation)]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''Program''' || Google Summer of Code 2025&lt;br /&gt;
|-&lt;br /&gt;
| '''Contributions''' || [https://github.com/OSGeo/grass/pulls?q=is%3Apr+author%3ANishantBansal2003+ Pull Requests]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
During my GSoC project, I addressed the challenge that most GRASS tools produced only plain text output, forcing users to write custom parsing code for Python-based workflows. The task was to make these tools more data-science friendly by adding structured output formats. To achieve this, I extended the use of the Parson library to implement consistent JSON output across multiple modules, refined the JSON structure introduced in the previous GSoC, and added optional support for SHELL and CSV outputs where appropriate. I developed comprehensive Python test cases, ensured backward compatibility, and provided documentation with practical examples such as loading JSON into pandas. As a result, GRASS users can now directly consume structured outputs in modern workflows, reducing parsing overhead, improving interoperability, and paving the way for broader adoption of GRASS in data science contexts.&lt;br /&gt;
&lt;br /&gt;
== The state of integration BEFORE the start of GSoC ==&lt;br /&gt;
Before the start of GSoC, the integration of GRASS with data science workflows was limited due to several challenges. The JSON outputs introduced in the previous GSoC contained deeply nested hierarchies, making them difficult to use directly with libraries such as '''pandas''' or in broader data science pipelines. While some tools already supported JSON (e.g., &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;), many important and highly demanded modules lacked JSON support, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt; and many more. This lack of consistency limited the seamless adoption of GRASS in analytics and machine learning contexts. Moreover, there was no clear '''documentation of the JSON schema''' or guidance on how to parse and utilize these outputs effectively in '''python or pandas''', which made it difficult for users to understand the use cases and integrate GRASS outputs into modern data science workflows.&lt;br /&gt;
&lt;br /&gt;
== The state of integration AFTER GSoC ==&lt;br /&gt;
&lt;br /&gt;
After GSoC, the integration state of JSON and alternative output formats in GRASS has significantly improved. I refactored the JSON structures for tools such as &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;, and others, removing unnecessary nesting introduced during the previous GSoC. This makes their outputs much easier to consume directly in &amp;lt;b&amp;gt;Python&amp;lt;/b&amp;gt; or with &amp;lt;b&amp;gt;pandas&amp;lt;/b&amp;gt;. In addition, JSON support has been extended to many essential and frequently used modules, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;, and many more. I also added detailed documentation of the JSON schema and provided examples showing how to parse and use these outputs effectively with Python and pandas. Together, these improvements make the adoption of GRASS in modern &amp;lt;b&amp;gt;data science workflows&amp;lt;/b&amp;gt; far more seamless and accessible.&lt;br /&gt;
&lt;br /&gt;
=== Enhancements made per tool ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;: Simplified JSON structure for univariate statistics, removed unnecessary hierarchy, and added new output format options (CSV, shell).&lt;br /&gt;
* &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;: Added JSON support for querying raster map colors, with a Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;: Added JSON support for reporting the current mapset, with a Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;: Updated JSON structure for raster map metadata, removing hierarchy for easier parsing. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;: Simplified JSON output for geographic region boundaries, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;: Added JSON support for GRASS version information, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;: Added JSON support for listing imagery groups, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;: Added JSON and CSV support for raster area statistics, with Python and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;: Refined JSON schema for nearest element queries, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;: Added JSON support for listing GRASS database files, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;: Updated JSON schema for printing vector attribute values, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;: Simplified JSON output, added CSV support, and included a matplotlib example for profile visualization.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;: Updated JSON schema for linear regression between rasters, with Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;: Updated JSON schema for category quantiles, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;: Added JSON support for raster volume calculations, fixed missing headers in CSV output, and provided pandas examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.columns&amp;lt;/code&amp;gt;: Added JSON output for listing database table columns, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;: Added JSON output for measuring lengths and areas, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.connect&amp;lt;/code&amp;gt;: Added JSON output for DB connection info, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.multi&amp;lt;/code&amp;gt;: Added JSON output for multiple regression between rasters, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.db.connect&amp;lt;/code&amp;gt;: Added JSON output for vector map attribute connections, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.findfile&amp;lt;/code&amp;gt;: Added JSON output for GRASS database file search, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;: Added JSON output for 3D raster map info, with Python example. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;: Added JSON output for extracting raster values at vector points, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt;: Added JSON and CSV support for locating closest points between raster objects, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;: Added JSON and CSV support for attribute data, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;: Migrated from manually written JSON to Parson-based JSON output, simplified schema, and provided Python parsing examples.&lt;br /&gt;
&lt;br /&gt;
All these changes were accompanied by regression tests to ensure that new JSON/CSV/SHELL/PLAIN output options do not break existing functionality. Additionally, I introduced comprehensive Python test cases for these outputs, making the enhancements reliable and future-proof. During this work, I also fixed several bugs in modules such as &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;, strengthening the stability of GRASS as a whole.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
To sum up, I’m glad to have met the three core objectives of my project with the constant support of my mentors:&lt;br /&gt;
&lt;br /&gt;
* Brought JSON output to several important and long-requested modules, added regression tests, and ensured reliable future test coverage.&lt;br /&gt;
* Enhanced the JSON schema introduced in last year’s GSoC by reducing unnecessary hierarchy, making it more consistent across tools, and providing Python/Pandas examples for practical use.&lt;br /&gt;
* Expanded &amp;lt;b&amp;gt;CSV&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;SHELL&amp;lt;/b&amp;gt; output formats to additional tools where they could bring value.&lt;br /&gt;
&lt;br /&gt;
This journey has been both rewarding and educational, and I’m grateful for the opportunity to contribute to GRASS through GSoC 2025. I especially want to thank &amp;lt;b&amp;gt;Anna Petrasova&amp;lt;/b&amp;gt; and the GRASS Development Team for their guidance and support. I’m excited to keep building on this work and further extend JSON and other features in the future.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
There is significant scope to extend structured output support across GRASS tools. In particular, future efforts should focus on:&lt;br /&gt;
* Expanding JSON output to additional modules, with details tracked here: [https://github.com/orgs/OSGeo/projects/10 GRASS JSON Outputs Project].&lt;br /&gt;
* Refining and standardizing the JSON schema to better support complex workflows and integrations.&lt;br /&gt;
* Exploring and implementing other output formats (e.g., SHELL, CSV, PLAIN) where they can improve usability and automation.&lt;br /&gt;
I also plan to continue contributing to GRASS by extending JSON support to more modules and engaging in community discussions around schema design and format integration.&lt;br /&gt;
&lt;br /&gt;
== Log of Pull Requests ==&lt;br /&gt;
Below is a list of pull requests submitted to the GRASS repository during GSoC 2025:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pull Request !! Description  !! Date   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5688 #5688] || r.univar: Fix JSON structure || May 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5773 #5773] || r.what.color: Add test file || May 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5775 #5775] || g.mapset: Add test file || May 26, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5784 #5784] || r.info: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;Closed&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5785 #5785] || g.region: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5810 #5810] || g.mapset: Add JSON support || June 2, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5821 #5821] || r.univar: Fix uninitialized zone_value || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5822 #5822] || r.what.color: Add JSON support || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5842 #5842] || r.info: Update test file || June 5, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5859 #5859] || r.info: Improve interface || June 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5863 #5863] || g.version: Add JSON support || June 9, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5870 #5870] || i.group: Add JSON support || June 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5879 #5879] || r.stats: Add test file || June 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5892 #5892] || r.stats: Add tests for JSON output || June 14, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5898 #5898] || v.distance: Update JSON format || June 16, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5900 #5900] || r.stats: fix uninitialised window value || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5906 #5906] || g.list: Add test file || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5921 #5921] || g.list: Add JSON support || June 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5929 #5929] || g.region: Update JSON format || June 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5946 #5946] || v.to.db: Update JSON format || June 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5962 #5962] || r.profile: Update JSON format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5966 #5966] || r.univar: Add shell and CSV format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5990 #5990] || r.regression.line: Add test file || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5993 #5993] || r.regression.line: Add JSON support || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6002 #6002] || r.stats.quantile: Add test file || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6007 #6007] || r.stats.quantile: Add JSON support || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6027 #6027] || r.volume: Add test file || July 4, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6036 #6036] || r.volume: Add JSON support || July 6, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6042 #6042] || db.columns: Add JSON support || July 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6051 #6051] || m.measure: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6052 #6052] || db.connect: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6053 #6053] || m.measure: Add JSON support || July 11, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6059 #6059] || db.connect: Add JSON support || July 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6066 #6066] || r.regression.multi: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6067 #6067] || v.db.connect: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6075 #6075] || r.regression.multi: Add JSON support || July 18, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6077 #6077] || v.db.connect: Add JSON support || July 19, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6091 #6091] || g.findfile: Add JSON support || July 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6098 #6098] || r3.info: Add test file || July 22, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6103 #6103] || r3.info: Add JSON support || July 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6109 #6109] || v.what.rast: Add test file || July 24, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6132 #6132] || v.category: Use CSV format instead of shell format || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6133 #6133] || r.stats: add CSV support || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6134 #6134] || r.volume: add csv column headers || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6140 #6140] || v.what.rast: Add JSON support || July 29, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6145 #6145] || r.profile: Add CSV support || July 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6150 #6150] || r.distance: Update existing test cases || August 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6204 #6204] || r.distance: Add JSON and CSV support || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6205 #6205] || v.class: Add more test cases and fix out-of-bounds bug || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6210 #6210] || v.class: Add JSON and CSV support || August 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6252 #6252] || v.what: Update JSON output format || August 23, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Additional Links ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Ttile&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| OSGeo Wiki Page&lt;br /&gt;
| [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C Add JSON output to different tools in C for GRASS]&lt;br /&gt;
|-&lt;br /&gt;
| Github Fork&lt;br /&gt;
| [https://github.com/NishantBansal2003/grass GitHub Fork]&lt;br /&gt;
|-&lt;br /&gt;
| GSoC Page&lt;br /&gt;
| [https://summerofcode.withgoogle.com/programs/2025/projects/GPVGd3DH Link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples &amp;amp; Images ==&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; JSON output in Python ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; can be directly loaded into a pandas DataFrame and used for plotting with matplotlib.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
# Run r.profile command&lt;br /&gt;
elevation = gs.read_command(&lt;br /&gt;
    &amp;quot;r.profile&amp;quot;,&lt;br /&gt;
    input=&amp;quot;elevation&amp;quot;,&lt;br /&gt;
    coordinates=&amp;quot;641712,226095,641546,224138,641546,222048,641049,221186&amp;quot;,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
    flags=&amp;quot;gc&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Load the JSON data into a dataframe&lt;br /&gt;
df = pd.read_json(elevation)&lt;br /&gt;
print(df)&lt;br /&gt;
&lt;br /&gt;
# Create the scatter plot&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
plt.scatter(df[&amp;quot;distance&amp;quot;], df[&amp;quot;value&amp;quot;], c=df[&amp;quot;color&amp;quot;], marker=&amp;quot;o&amp;quot;)&lt;br /&gt;
plt.title(&amp;quot;Profile of Distance vs. Elevation with Color Coding&amp;quot;)&lt;br /&gt;
plt.xlabel(&amp;quot;Distance (meters)&amp;quot;)&lt;br /&gt;
plt.ylabel(&amp;quot;Elevation&amp;quot;)&lt;br /&gt;
plt.grid(True)&lt;br /&gt;
plt.show()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame Output (first 10 rows) ====  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
         easting       northing   distance      value    color&lt;br /&gt;
0  641712.000000  226095.000000   0.000000  84.661507  #71FF00&lt;br /&gt;
1  641711.154826  226085.036106   9.999675  84.511765  #6FFF00&lt;br /&gt;
2  641710.309651  226075.072213  19.999349  84.241806  #6BFF00&lt;br /&gt;
3  641709.464477  226065.108319  29.999024  84.304214  #6CFF00&lt;br /&gt;
4  641708.619302  226055.144426  39.998699  84.174400  #6AFF00&lt;br /&gt;
5  641707.774128  226045.180532  49.998374  84.112534  #6AFF00&lt;br /&gt;
6  641706.928954  226035.216639  59.998048  84.011208  #68FF00&lt;br /&gt;
7  641706.083779  226025.252745  69.997723  83.834084  #66FF00&lt;br /&gt;
8  641705.238605  226015.288851  79.997398  83.870193  #67FF00&lt;br /&gt;
9  641704.393430  226005.324958  89.997073  84.194908  #6BFF00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Visualization ====  &lt;br /&gt;
&lt;br /&gt;
Matplotlib scatter plot generated from the &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; JSON output: &lt;br /&gt;
&lt;br /&gt;
[[File:R profile plot.png]]&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt; can be directly loaded into a pandas DataFrame.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.class&amp;quot;,&lt;br /&gt;
    map=&amp;quot;bridges&amp;quot;,&lt;br /&gt;
    column=&amp;quot;YEAR_BUILT&amp;quot;,&lt;br /&gt;
    algorithm=&amp;quot;std&amp;quot;,&lt;br /&gt;
    nbclasses=5,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data[&amp;quot;intervals&amp;quot;])&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output (intervals) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
          from           to  frequency&lt;br /&gt;
0  1891.000000  1938.829689        750&lt;br /&gt;
1  1938.829689  1954.722836       1841&lt;br /&gt;
2  1954.722836  1970.615983       5556&lt;br /&gt;
3  1970.615983  1986.509130       1788&lt;br /&gt;
4  1986.509130  1997.000000       1003&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame to display categories and values.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.what.rast&amp;quot;, map=&amp;quot;bridges&amp;quot;, raster=&amp;quot;elevation&amp;quot;, flags=&amp;quot;p&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    category       value&lt;br /&gt;
0       4635   86.851212&lt;br /&gt;
1       4648   87.883255&lt;br /&gt;
2       4688  103.382004&lt;br /&gt;
3       4709   67.387856&lt;br /&gt;
4       4986   90.972832&lt;br /&gt;
5       4991   86.550629&lt;br /&gt;
6       5027   84.256355&lt;br /&gt;
7       5060   79.500443&lt;br /&gt;
8       5071   78.732864&lt;br /&gt;
9       5089   85.703636&lt;br /&gt;
10      5096  115.967323&lt;br /&gt;
11      5130   81.055870&lt;br /&gt;
12      5150   92.812927&lt;br /&gt;
13      5166   88.149483&lt;br /&gt;
14      5184   76.426331&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame to locate closest points.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
&lt;br /&gt;
result = gs.parse_command(&lt;br /&gt;
    &amp;quot;r.distance&amp;quot;, map=[&amp;quot;zipcodes&amp;quot;, &amp;quot;lakes&amp;quot;], flags=&amp;quot;l&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
df = pd.json_normalize(result)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output (truncated) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
        distance  from_cell.category  from_cell.easting  from_cell.northing from_cell.label  to_cell.category  to_cell.easting  to_cell.northing to_cell.label&lt;br /&gt;
0   11158.870911               27511             632605              223295            CARY             34300           640585            215495      Dam/Weir&lt;br /&gt;
1    1037.304198               27511             631735              222695            CARY             39000           632315            221835     Lake/Pond&lt;br /&gt;
2    2277.059507               27511             630015              221605            CARY             43600           630765            219455     Reservoir&lt;br /&gt;
..           ...                 ...                ...                 ...             ...               ...              ...               ...           ...&lt;br /&gt;
36   4922.600939               27610             642975              219815         RALEIGH             34300           640615            215495      Dam/Weir&lt;br /&gt;
37     50.000000               27610             642655              222765         RALEIGH             39000           642705            222765     Lake/Pond&lt;br /&gt;
38  11368.069317               27610             642305              220945         RALEIGH             43600           631035            219455     Reservoir&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{GSoC}}&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28667</id>
		<title>GRASS GSoC 2025 Add JSON output to different tools in C</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28667"/>
		<updated>2025-08-24T07:04:01Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: /* Examples &amp;amp; Images */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Nishant Bansal&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo - Open Source Geospatial Foundation]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/NishantBansal2003/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''GSoC proposal''' || [https://docs.google.com/document/d/1ZPQ9RXU7b_RUDmBmAMeK7ZjFAV1WC7Urd1Zlz678jyw/edit?tab=t.0#heading=h.z6ne0og04bp5 View Proposal]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Abstract =&lt;br /&gt;
Currently, most GRASS tools produce data in plain text by default. This means that users who want to process the output in Python need to create custom parsing code. To make this easier, several modules could be improved by oﬀering JSON as an alternative output format. Recently, the Parson library was added to the GRASS codebase to support JSON output in addition to plain text. Building on the advancements made during the last GSoC, my project aims to expand JSON output capabilities to more tools using the Parson library. I will also work on making the JSON structure introduced in the previous GSoC more useful and consistent. Additionally, I plan to add support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
&lt;br /&gt;
# Working with mentors to finalize the structure of the JSON output.&lt;br /&gt;
# Adding an option to choose the output format (plain text or JSON) for each updated tool.&lt;br /&gt;
# Make the JSON structure introduced during the last GSoC more useful and consistent across tools.&lt;br /&gt;
# Developing Python test cases to ensure that the JSON output works correctly and to avoid future issues.&lt;br /&gt;
# Providing basic documentation and example JSON outputs for each modified tool.&lt;br /&gt;
# Adding support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
# Develop simple examples demonstrating how to use JSON output in a data science workflow, such as reading JSON data into pandas or python.&lt;br /&gt;
&lt;br /&gt;
= Timeline =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Period !! Timeline  !! Tasks   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period &lt;br /&gt;
||&lt;br /&gt;
May 8 - June 1  &lt;br /&gt;
|| &lt;br /&gt;
# Reviewed the work done during the last GSoC to stabilize the JSON output.&lt;br /&gt;
# Discussed the priority tools for adding JSON support.&lt;br /&gt;
# Read GRASS documentation to add Python and JSON examples to the documentation.&lt;br /&gt;
|| &lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;13&amp;quot; | Official Coding Period &lt;br /&gt;
|-&lt;br /&gt;
| '''Week 1''' (June 2 - June 8) || &lt;br /&gt;
# Add JSON support for g.mapset [https://github.com/OSGeo/grass/pull/5810 #5810]&lt;br /&gt;
# Fix uninitialized zone_value in r.univar [https://github.com/OSGeo/grass/pull/5821 #5821]&lt;br /&gt;
# Add JSON support for r.what.color [https://github.com/OSGeo/grass/pull/5822 #5822]&lt;br /&gt;
# Update test file in r.info [https://github.com/OSGeo/grass/pull/5842 #5842]&lt;br /&gt;
# Improve interface for r.info [https://github.com/OSGeo/grass/pull/5859 #5859]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 2''' (June 9 - June 15) ||&lt;br /&gt;
# Add JSON support for g.version [https://github.com/OSGeo/grass/pull/5863 #5863]&lt;br /&gt;
# Add JSON support for i.group [https://github.com/OSGeo/grass/pull/5870 #5870]&lt;br /&gt;
# Add test file in r.stats [https://github.com/OSGeo/grass/pull/5879 #5879]&lt;br /&gt;
# Add tests for JSON output in r.stats [https://github.com/OSGeo/grass/pull/5892 #5892]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 3''' (June 16 - June 22) ||&lt;br /&gt;
# Update the JSON output schema of v.distance [https://github.com/OSGeo/grass/pull/5898 #5898]&lt;br /&gt;
# Fix uninitialized window variable in r.stats [https://github.com/OSGeo/grass/pull/5900 #5900]&lt;br /&gt;
# Add test file in g.list [https://github.com/OSGeo/grass/pull/5906 #5906]&lt;br /&gt;
# Add JSON support for g.list [https://github.com/OSGeo/grass/pull/5921 #5921]&lt;br /&gt;
# Update the JSON output schema of g.region [https://github.com/OSGeo/grass/pull/5929 #5929]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 4''' (June 23 - June 29) ||&lt;br /&gt;
# Update the JSON output schema of v.to.db [https://github.com/OSGeo/grass/pull/5946 #5946]&lt;br /&gt;
# Update the JSON output schema of r.profile [https://github.com/OSGeo/grass/pull/5962 #5962]&lt;br /&gt;
# Add SHELL and CSV output support for r.univar [https://github.com/OSGeo/grass/pull/5966 #5966]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 5''' (June 30 - July 6) ||&lt;br /&gt;
# Add test file in r.regression.line [https://github.com/OSGeo/grass/pull/5990 #5990]&lt;br /&gt;
# Add JSON support for r.regression.line [https://github.com/OSGeo/grass/pull/5993 #5993]&lt;br /&gt;
# Add test file in r.stats.quantile [https://github.com/OSGeo/grass/pull/6002 #6002]&lt;br /&gt;
# Add JSON support for r.stats.quantile [https://github.com/OSGeo/grass/pull/6007 #6007]&lt;br /&gt;
# Add test file in r.volume [https://github.com/OSGeo/grass/pull/6027 #6027]&lt;br /&gt;
# Add JSON support for r.volume [https://github.com/OSGeo/grass/pull/6036 #6036]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 6''' (July 7 - July 13) ||&lt;br /&gt;
# Add JSON support for db.columns [https://github.com/OSGeo/grass/pull/6042 #6042]&lt;br /&gt;
# Add test file in m.measure [https://github.com/OSGeo/grass/pull/6051 #6051]&lt;br /&gt;
# Add test file in db.connect [https://github.com/OSGeo/grass/pull/6052 #6052]&lt;br /&gt;
# Add JSON support for m.measure [https://github.com/OSGeo/grass/pull/6053 #6053]&lt;br /&gt;
# Add JSON support for db.connect [https://github.com/OSGeo/grass/pull/6059 #6059]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | '''Week 7''' (July 14 - July 20) ||&lt;br /&gt;
# Add test file in r.regression.multi [https://github.com/OSGeo/grass/pull/6066 #6066]&lt;br /&gt;
# Add test file in v.db.connect [https://github.com/OSGeo/grass/pull/6067 #6067]&lt;br /&gt;
# Add JSON support for r.regression.multi [https://github.com/OSGeo/grass/pull/6075 #6075]&lt;br /&gt;
# Add JSON support for v.db.connect [https://github.com/OSGeo/grass/pull/6077 #6077]&lt;br /&gt;
# Submit MidTerm evaluation.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 8''' (July 21 - July 27) ||&lt;br /&gt;
# Add JSON support for g.findfile [https://github.com/OSGeo/grass/pull/6091 #6091]&lt;br /&gt;
# Add test file in r3.info [https://github.com/OSGeo/grass/pull/6098 #6098]&lt;br /&gt;
# Add JSON support for r3.info [https://github.com/OSGeo/grass/pull/6103 #6103]&lt;br /&gt;
# Add test file in v.what.rast [https://github.com/OSGeo/grass/pull/6109 #6109]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 9''' (July 28 - August 3) ||&lt;br /&gt;
# Update format to CSV instead of shell in v.category [https://github.com/OSGeo/grass/pull/6132 #6132]&lt;br /&gt;
# Add CSV output support to r.stats [https://github.com/OSGeo/grass/pull/6133 #6133]&lt;br /&gt;
# Add CSV headers to r.volume [https://github.com/OSGeo/grass/pull/6134 #6134]&lt;br /&gt;
# Add JSON support for v.what.rast [https://github.com/OSGeo/grass/pull/6140 #6140]&lt;br /&gt;
# Add CSV output support to r.profile [https://github.com/OSGeo/grass/pull/6145 #6145]&lt;br /&gt;
# Update test cases in r.distance [https://github.com/OSGeo/grass/pull/6150 #6150]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 10''' (August 4 - August 10) ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 11''' (August 11 - August 17) ||&lt;br /&gt;
# Add JSON and CSV support for r.distance [https://github.com/OSGeo/grass/pull/6204 #6204]&lt;br /&gt;
# Add more test cases in v.class [https://github.com/OSGeo/grass/pull/6205 #6205]&lt;br /&gt;
# Add JSON and CSV support for v.class [https://github.com/OSGeo/grass/pull/6210 #6210]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 12''' (August 18 - August 24) ||&lt;br /&gt;
# Update JSON output format for v.what [https://github.com/OSGeo/grass/pull/6252 #6252]&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Evaluation Period &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | August 25 - September 1 ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
# Submit code, final evaluation and write the final GSoC report.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Reports =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* Introduced myself on the [https://discourse.osgeo.org/t/gsoc-2025-introduction-nishant-bansal/147005 OSGeo Discourse mailing list].&lt;br /&gt;
* Created both my [https://wiki.osgeo.org/wiki/User:Nishantbansal2003 personal Wiki page] and the [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C project Wiki page], adding all necessary project-related information.&lt;br /&gt;
* Read GRASS documentation to support the addition of Python and JSON examples.&lt;br /&gt;
* Worked on the following pull requests:&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5688 #5688]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5773 #5773]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5775 #5775]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5784 #5784]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5785 #5785]&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to the g.mapset and r.what.color modules.&lt;br /&gt;
* If time permits, I will begin improving the r.info interface: [https://github.com/OSGeo/grass/issues/5793 Issue #5793]&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
'''Project Discussions and Meetings'''&lt;br /&gt;
* '''14 May 2025''': Introductory meeting discussing JSON support and overall project milestones.&lt;br /&gt;
* '''21 May 2025''': Introduction with fellow developers. Discussed priority tools, adding Python/Pandas examples, and approaches for finalizing the JSON schema for each module.&lt;br /&gt;
&lt;br /&gt;
== Week-1 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.mapset''': Added JSON output support, now you can use -p and -l flags to get JSON-formatted results.&lt;br /&gt;
* '''r.univar''': Fixed a bug causing an uninitialized zone_value.&lt;br /&gt;
* '''r.what.color''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5822 #5822])&lt;br /&gt;
* '''r.info (regression tests)''': To maintain backward compatibility while updating its interface, I added strong regression tests.&lt;br /&gt;
* '''r.info (interface improvements)''': Began improving the module’s interface. (See PR [https://github.com/OSGeo/grass/pull/5859 #5859])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.version (see issue [https://github.com/OSGeo/grass/issues/5816 #5816]).&lt;br /&gt;
* Add JSON output support to i.group (see issue [https://github.com/OSGeo/grass/issues/5815 #5815]).&lt;br /&gt;
* If time permits, write tests for r.stats (see issue [https://github.com/OSGeo/grass/issues/5814 #5814]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-2 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.version''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5863 #5863])&lt;br /&gt;
* '''i.group''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5870 #5870])&lt;br /&gt;
* '''r.stats (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats''': Added tests for JSON output; this uncovered a bug, which was fixed alongside.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.distance (see issue [https://github.com/OSGeo/grass/issues/5846 #5846]).&lt;br /&gt;
* Add JSON output support to g.list (see issue [https://github.com/OSGeo/grass/issues/5848 #5848]).&lt;br /&gt;
* If time permits, fix the JSON output format of g.region (see issue [https://github.com/OSGeo/grass/issues/5828 #5828]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-3 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.distance''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5898 #5898])&lt;br /&gt;
* '''r.stats''': Fixed a bug causing an uninitialized &amp;lt;code&amp;gt;window&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
* '''g.list (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''g.list''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5921 #5921])&lt;br /&gt;
* '''g.region''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5929 #5929])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.to.db (see issue [https://github.com/OSGeo/grass/pull/5711 #5711]).&lt;br /&gt;
* Update JSON output format and documentation of r.profile (see issue [https://github.com/OSGeo/grass/pull/5834 #5834]).&lt;br /&gt;
* If time permits, add shell and csv output formats to r.univar (see issue [https://github.com/OSGeo/grass/pull/5824 #5824]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-4 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.to.db''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5946 #5946])&lt;br /&gt;
* '''r.profile''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5962 #5962])&lt;br /&gt;
* '''r.univar''': Implemented SHELL and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/5966 #5966])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.regression.line (see issue [https://github.com/OSGeo/grass/pull/5950 #5950]).&lt;br /&gt;
* Add JSON output support to r.stats.quantile (see issue [https://github.com/OSGeo/grass/pull/5951 #5951]).&lt;br /&gt;
* Add JSON output support to r.volume (see issue [https://github.com/OSGeo/grass/pull/5949 #5949]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-5 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.line (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.line''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5993 #5993])&lt;br /&gt;
* '''r.stats.quantile (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats.quantile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6007 #6007])&lt;br /&gt;
* '''r.volume (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.volume''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6036 #6036])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to m.measure (see issue [https://github.com/OSGeo/grass/pull/6006 #6006]).&lt;br /&gt;
* Add JSON output support to db.columns (see issue [https://github.com/OSGeo/grass/pull/6008 #6008]).&lt;br /&gt;
* Add JSON output support to db.connect (see issue [https://github.com/OSGeo/grass/pull/6009 #6009]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-6 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''db.columns''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6042 #6042])&lt;br /&gt;
* '''m.measure (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''m.measure''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6053 #6053])&lt;br /&gt;
* '''db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6059 #6059])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to v.db.connect (see issue [https://github.com/OSGeo/grass/pull/6014 #6014]).&lt;br /&gt;
* Add JSON output support to r.regression.multi (see issue [https://github.com/OSGeo/grass/pull/6010 #6010]).&lt;br /&gt;
* If time permits, add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* If time permits, add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-7 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.multi (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''v.db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.multi''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6075 #6075])&lt;br /&gt;
* '''v.db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6077 #6077])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* Add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
* If time permits, add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-8 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.findfile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6091 #6091])&lt;br /&gt;
* '''r3.info (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a flag-handling bug.&lt;br /&gt;
* '''r3.info''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6103 #6103])&lt;br /&gt;
* '''v.what.rast (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a sorting bug.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
* Update format to CSV instead of shell in v.category (see issue [https://github.com/OSGeo/grass/pull/6025 #6025]).&lt;br /&gt;
* Add CSV output support to r.stats (see issue [https://github.com/OSGeo/grass/issues/5835 #5835]).&lt;br /&gt;
* If time permits, add CSV output support to r.profile (see issue [https://github.com/OSGeo/grass/issues/5958 #5958]).&lt;br /&gt;
* If time permits, add CSV headers to r.volume (see issue [https://github.com/OSGeo/grass/issues/6049 #6049]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I don’t have any blockers this week. However, I’ll be a little busy with some personal work from August 3 to August 10, so I’ll try to complete next week’s tasks this week itself.&lt;br /&gt;
&lt;br /&gt;
== Week-9 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.category''': Updated format to CSV instead of shell. (See PR [https://github.com/OSGeo/grass/pull/6132 #6132])&lt;br /&gt;
* '''r.stats''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6133 #6133])&lt;br /&gt;
* '''r.volume''': Implemented CSV column headers support. (See PR [https://github.com/OSGeo/grass/pull/6134 #6134])&lt;br /&gt;
* '''v.what.rast''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6140 #6140])&lt;br /&gt;
* '''r.profile''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6145 #6145])&lt;br /&gt;
* '''r.distance (regression tests)''': Updated regression tests to ensure backward compatibility with new JSON support. (See PR [https://github.com/OSGeo/grass/pull/6150 #6150])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* I’ll be a bit busy with some personal work from August 3 to 10, so I completed next week’s tasks last week itself. I’ve already informed my mentors about my limited availability.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* Yes, I’ll be a bit busy with some personal work from August 3 to 10.&lt;br /&gt;
&lt;br /&gt;
== Week-10 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* This week I was busy with some personal work, so I did not complete any additional tasks. However, I had already finished this week’s tasks last week. This week, I mostly focused on handling reviews for those PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.distance (see issue [https://github.com/OSGeo/grass/issues/6135 #6135]).&lt;br /&gt;
* Add JSON output support to v.class (see issue [https://github.com/OSGeo/grass/issues/6136 #6136]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-11 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.distance''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6204 #6204])&lt;br /&gt;
* '''v.class''': Updated regression tests to ensure backward compatibility with new JSON support and fixed a out-of-bounds bug. (See PR [https://github.com/OSGeo/grass/pull/6205 #6205])&lt;br /&gt;
* '''v.class''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6210 #6210])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Discuss next week’s tasks with my mentors, if no issues are assigned, I’ll identify tools that currently lack JSON support and evaluate which ones are feasible to add it to.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-12 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.what''': Update JSON output format. (See PR [https://github.com/OSGeo/grass/pull/6252 #6252])&lt;br /&gt;
* Addressed review comments on my open PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
= Final Report =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Title''' || Add JSON output to different tools in C for GRASS&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo (Open Source Geospatial Foundation)]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''Program''' || Google Summer of Code 2025&lt;br /&gt;
|-&lt;br /&gt;
| '''Contributions''' || [https://github.com/OSGeo/grass/pulls?q=is%3Apr+author%3ANishantBansal2003+ Pull Requests]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
During my GSoC project, I addressed the challenge that most GRASS tools produced only plain text output, forcing users to write custom parsing code for Python-based workflows. The task was to make these tools more data-science friendly by adding structured output formats. To achieve this, I extended the use of the Parson library to implement consistent JSON output across multiple modules, refined the JSON structure introduced in the previous GSoC, and added optional support for SHELL and CSV outputs where appropriate. I developed comprehensive Python test cases, ensured backward compatibility, and provided documentation with practical examples such as loading JSON into pandas. As a result, GRASS users can now directly consume structured outputs in modern workflows, reducing parsing overhead, improving interoperability, and paving the way for broader adoption of GRASS in data science contexts.&lt;br /&gt;
&lt;br /&gt;
== The state of integration BEFORE the start of GSoC ==&lt;br /&gt;
Before the start of GSoC, the integration of GRASS with data science workflows was limited due to several challenges. The JSON outputs introduced in the previous GSoC contained deeply nested hierarchies, making them difficult to use directly with libraries such as '''pandas''' or in broader data science pipelines. While some tools already supported JSON (e.g., &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;), many important and highly demanded modules lacked JSON support, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt; and many more. This lack of consistency limited the seamless adoption of GRASS in analytics and machine learning contexts. Moreover, there was no clear '''documentation of the JSON schema''' or guidance on how to parse and utilize these outputs effectively in '''python or pandas''', which made it difficult for users to understand the use cases and integrate GRASS outputs into modern data science workflows.&lt;br /&gt;
&lt;br /&gt;
== The state of integration AFTER GSoC ==&lt;br /&gt;
&lt;br /&gt;
After GSoC, the integration state of JSON and alternative output formats in GRASS has significantly improved. I refactored the JSON structures for tools such as &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;, and others, removing unnecessary nesting introduced during the previous GSoC. This makes their outputs much easier to consume directly in &amp;lt;b&amp;gt;Python&amp;lt;/b&amp;gt; or with &amp;lt;b&amp;gt;pandas&amp;lt;/b&amp;gt;. In addition, JSON support has been extended to many essential and frequently used modules, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;, and many more. I also added detailed documentation of the JSON schema and provided examples showing how to parse and use these outputs effectively with Python and pandas. Together, these improvements make the adoption of GRASS in modern &amp;lt;b&amp;gt;data science workflows&amp;lt;/b&amp;gt; far more seamless and accessible.&lt;br /&gt;
&lt;br /&gt;
=== Enhancements made per tool ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;: Simplified JSON structure for univariate statistics, removed unnecessary hierarchy, and added new output format options (CSV, shell).&lt;br /&gt;
* &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;: Added JSON support for querying raster map colors, with a Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;: Added JSON support for reporting the current mapset, with a Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;: Updated JSON structure for raster map metadata, removing hierarchy for easier parsing. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;: Simplified JSON output for geographic region boundaries, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;: Added JSON support for GRASS version information, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;: Added JSON support for listing imagery groups, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;: Added JSON and CSV support for raster area statistics, with Python and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;: Refined JSON schema for nearest element queries, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;: Added JSON support for listing GRASS database files, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;: Updated JSON schema for printing vector attribute values, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;: Simplified JSON output, added CSV support, and included a matplotlib example for profile visualization.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;: Updated JSON schema for linear regression between rasters, with Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;: Updated JSON schema for category quantiles, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;: Added JSON support for raster volume calculations, fixed missing headers in CSV output, and provided pandas examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.columns&amp;lt;/code&amp;gt;: Added JSON output for listing database table columns, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;: Added JSON output for measuring lengths and areas, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.connect&amp;lt;/code&amp;gt;: Added JSON output for DB connection info, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.multi&amp;lt;/code&amp;gt;: Added JSON output for multiple regression between rasters, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.db.connect&amp;lt;/code&amp;gt;: Added JSON output for vector map attribute connections, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.findfile&amp;lt;/code&amp;gt;: Added JSON output for GRASS database file search, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;: Added JSON output for 3D raster map info, with Python example. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;: Added JSON output for extracting raster values at vector points, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt;: Added JSON and CSV support for locating closest points between raster objects, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;: Added JSON and CSV support for attribute data, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;: Migrated from manually written JSON to Parson-based JSON output, simplified schema, and provided Python parsing examples.&lt;br /&gt;
&lt;br /&gt;
All these changes were accompanied by regression tests to ensure that new JSON/CSV/SHELL/PLAIN output options do not break existing functionality. Additionally, I introduced comprehensive Python test cases for these outputs, making the enhancements reliable and future-proof. During this work, I also fixed several bugs in modules such as &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;, strengthening the stability of GRASS as a whole.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
To sum up, I’m glad to have met the three core objectives of my project with the constant support of my mentors:&lt;br /&gt;
&lt;br /&gt;
* Brought JSON output to several important and long-requested modules, added regression tests, and ensured reliable future test coverage.&lt;br /&gt;
* Enhanced the JSON schema introduced in last year’s GSoC by reducing unnecessary hierarchy, making it more consistent across tools, and providing Python/Pandas examples for practical use.&lt;br /&gt;
* Expanded &amp;lt;b&amp;gt;CSV&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;SHELL&amp;lt;/b&amp;gt; output formats to additional tools where they could bring value.&lt;br /&gt;
&lt;br /&gt;
This journey has been both rewarding and educational, and I’m grateful for the opportunity to contribute to GRASS through GSoC 2025. I especially want to thank &amp;lt;b&amp;gt;Anna Petrasova&amp;lt;/b&amp;gt; and the GRASS Development Team for their guidance and support. I’m excited to keep building on this work and further extend JSON and other features in the future.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
There is significant scope to extend structured output support across GRASS tools. In particular, future efforts should focus on:&lt;br /&gt;
* Expanding JSON output to additional modules, with details tracked here: [https://github.com/orgs/OSGeo/projects/10 GRASS JSON Outputs Project].&lt;br /&gt;
* Refining and standardizing the JSON schema to better support complex workflows and integrations.&lt;br /&gt;
* Exploring and implementing other output formats (e.g., SHELL, CSV, PLAIN) where they can improve usability and automation.&lt;br /&gt;
I also plan to continue contributing to GRASS by extending JSON support to more modules and engaging in community discussions around schema design and format integration.&lt;br /&gt;
&lt;br /&gt;
== Log of Pull Requests ==&lt;br /&gt;
Below is a list of pull requests submitted to the GRASS repository during GSoC 2025:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pull Request !! Description  !! Date   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5688 #5688] || r.univar: Fix JSON structure || May 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5773 #5773] || r.what.color: Add test file || May 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5775 #5775] || g.mapset: Add test file || May 26, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5784 #5784] || r.info: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;Closed&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5785 #5785] || g.region: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5810 #5810] || g.mapset: Add JSON support || June 2, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5821 #5821] || r.univar: Fix uninitialized zone_value || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5822 #5822] || r.what.color: Add JSON support || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5842 #5842] || r.info: Update test file || June 5, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5859 #5859] || r.info: Improve interface || June 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5863 #5863] || g.version: Add JSON support || June 9, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5870 #5870] || i.group: Add JSON support || June 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5879 #5879] || r.stats: Add test file || June 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5892 #5892] || r.stats: Add tests for JSON output || June 14, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5898 #5898] || v.distance: Update JSON format || June 16, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5900 #5900] || r.stats: fix uninitialised window value || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5906 #5906] || g.list: Add test file || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5921 #5921] || g.list: Add JSON support || June 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5929 #5929] || g.region: Update JSON format || June 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5946 #5946] || v.to.db: Update JSON format || June 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5962 #5962] || r.profile: Update JSON format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5966 #5966] || r.univar: Add shell and CSV format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5990 #5990] || r.regression.line: Add test file || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5993 #5993] || r.regression.line: Add JSON support || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6002 #6002] || r.stats.quantile: Add test file || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6007 #6007] || r.stats.quantile: Add JSON support || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6027 #6027] || r.volume: Add test file || July 4, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6036 #6036] || r.volume: Add JSON support || July 6, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6042 #6042] || db.columns: Add JSON support || July 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6051 #6051] || m.measure: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6052 #6052] || db.connect: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6053 #6053] || m.measure: Add JSON support || July 11, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6059 #6059] || db.connect: Add JSON support || July 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6066 #6066] || r.regression.multi: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6067 #6067] || v.db.connect: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6075 #6075] || r.regression.multi: Add JSON support || July 18, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6077 #6077] || v.db.connect: Add JSON support || July 19, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6091 #6091] || g.findfile: Add JSON support || July 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6098 #6098] || r3.info: Add test file || July 22, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6103 #6103] || r3.info: Add JSON support || July 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6109 #6109] || v.what.rast: Add test file || July 24, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6132 #6132] || v.category: Use CSV format instead of shell format || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6133 #6133] || r.stats: add CSV support || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6134 #6134] || r.volume: add csv column headers || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6140 #6140] || v.what.rast: Add JSON support || July 29, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6145 #6145] || r.profile: Add CSV support || July 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6150 #6150] || r.distance: Update existing test cases || August 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6204 #6204] || r.distance: Add JSON and CSV support || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6205 #6205] || v.class: Add more test cases and fix out-of-bounds bug || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6210 #6210] || v.class: Add JSON and CSV support || August 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6252 #6252] || v.what: Update JSON output format || August 23, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Additional Links ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Ttile&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| OSGeo Wiki Page&lt;br /&gt;
| [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C Add JSON output to different tools in C for GRASS]&lt;br /&gt;
|-&lt;br /&gt;
| Github Fork&lt;br /&gt;
| [https://github.com/NishantBansal2003/grass GitHub Fork]&lt;br /&gt;
|-&lt;br /&gt;
| GSoC Page&lt;br /&gt;
| [https://summerofcode.withgoogle.com/programs/2025/projects/GPVGd3DH Link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples &amp;amp; Images ==&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; JSON output in Python ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; can be directly loaded into a pandas DataFrame and used for plotting with matplotlib.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
# Run r.profile command&lt;br /&gt;
elevation = gs.read_command(&lt;br /&gt;
    &amp;quot;r.profile&amp;quot;,&lt;br /&gt;
    input=&amp;quot;elevation&amp;quot;,&lt;br /&gt;
    coordinates=&amp;quot;641712,226095,641546,224138,641546,222048,641049,221186&amp;quot;,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
    flags=&amp;quot;gc&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Load the JSON data into a dataframe&lt;br /&gt;
df = pd.read_json(elevation)&lt;br /&gt;
print(df)&lt;br /&gt;
&lt;br /&gt;
# Create the scatter plot&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
plt.scatter(df[&amp;quot;distance&amp;quot;], df[&amp;quot;value&amp;quot;], c=df[&amp;quot;color&amp;quot;], marker=&amp;quot;o&amp;quot;)&lt;br /&gt;
plt.title(&amp;quot;Profile of Distance vs. Elevation with Color Coding&amp;quot;)&lt;br /&gt;
plt.xlabel(&amp;quot;Distance (meters)&amp;quot;)&lt;br /&gt;
plt.ylabel(&amp;quot;Elevation&amp;quot;)&lt;br /&gt;
plt.grid(True)&lt;br /&gt;
plt.show()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame Output (first 10 rows) ====  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
         easting       northing   distance      value    color&lt;br /&gt;
0  641712.000000  226095.000000   0.000000  84.661507  #71FF00&lt;br /&gt;
1  641711.154826  226085.036106   9.999675  84.511765  #6FFF00&lt;br /&gt;
2  641710.309651  226075.072213  19.999349  84.241806  #6BFF00&lt;br /&gt;
3  641709.464477  226065.108319  29.999024  84.304214  #6CFF00&lt;br /&gt;
4  641708.619302  226055.144426  39.998699  84.174400  #6AFF00&lt;br /&gt;
5  641707.774128  226045.180532  49.998374  84.112534  #6AFF00&lt;br /&gt;
6  641706.928954  226035.216639  59.998048  84.011208  #68FF00&lt;br /&gt;
7  641706.083779  226025.252745  69.997723  83.834084  #66FF00&lt;br /&gt;
8  641705.238605  226015.288851  79.997398  83.870193  #67FF00&lt;br /&gt;
9  641704.393430  226005.324958  89.997073  84.194908  #6BFF00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Visualization ====  &lt;br /&gt;
&lt;br /&gt;
Matplotlib scatter plot generated from the &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; JSON output: &lt;br /&gt;
&lt;br /&gt;
[[File:R profile plot.png]]&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt; can be directly loaded into a pandas DataFrame.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.class&amp;quot;,&lt;br /&gt;
    map=&amp;quot;bridges&amp;quot;,&lt;br /&gt;
    column=&amp;quot;YEAR_BUILT&amp;quot;,&lt;br /&gt;
    algorithm=&amp;quot;std&amp;quot;,&lt;br /&gt;
    nbclasses=5,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data[&amp;quot;intervals&amp;quot;])&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output (intervals) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
          from           to  frequency&lt;br /&gt;
0  1891.000000  1938.829689        750&lt;br /&gt;
1  1938.829689  1954.722836       1841&lt;br /&gt;
2  1954.722836  1970.615983       5556&lt;br /&gt;
3  1970.615983  1986.509130       1788&lt;br /&gt;
4  1986.509130  1997.000000       1003&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt; can be directly loaded into a Pandas DataFrame to display categories and values.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.what.rast&amp;quot;, map=&amp;quot;bridges&amp;quot;, raster=&amp;quot;elevation&amp;quot;, flags=&amp;quot;p&amp;quot;, format=&amp;quot;json&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data)&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    category       value&lt;br /&gt;
0       4635   86.851212&lt;br /&gt;
1       4648   87.883255&lt;br /&gt;
2       4688  103.382004&lt;br /&gt;
3       4709   67.387856&lt;br /&gt;
4       4986   90.972832&lt;br /&gt;
5       4991   86.550629&lt;br /&gt;
6       5027   84.256355&lt;br /&gt;
7       5060   79.500443&lt;br /&gt;
8       5071   78.732864&lt;br /&gt;
9       5089   85.703636&lt;br /&gt;
10      5096  115.967323&lt;br /&gt;
11      5130   81.055870&lt;br /&gt;
12      5150   92.812927&lt;br /&gt;
13      5166   88.149483&lt;br /&gt;
14      5184   76.426331&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{GSoC}}&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28666</id>
		<title>GRASS GSoC 2025 Add JSON output to different tools in C</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28666"/>
		<updated>2025-08-24T06:57:59Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: /* Examples &amp;amp; Images */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Nishant Bansal&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo - Open Source Geospatial Foundation]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/NishantBansal2003/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''GSoC proposal''' || [https://docs.google.com/document/d/1ZPQ9RXU7b_RUDmBmAMeK7ZjFAV1WC7Urd1Zlz678jyw/edit?tab=t.0#heading=h.z6ne0og04bp5 View Proposal]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Abstract =&lt;br /&gt;
Currently, most GRASS tools produce data in plain text by default. This means that users who want to process the output in Python need to create custom parsing code. To make this easier, several modules could be improved by oﬀering JSON as an alternative output format. Recently, the Parson library was added to the GRASS codebase to support JSON output in addition to plain text. Building on the advancements made during the last GSoC, my project aims to expand JSON output capabilities to more tools using the Parson library. I will also work on making the JSON structure introduced in the previous GSoC more useful and consistent. Additionally, I plan to add support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
&lt;br /&gt;
# Working with mentors to finalize the structure of the JSON output.&lt;br /&gt;
# Adding an option to choose the output format (plain text or JSON) for each updated tool.&lt;br /&gt;
# Make the JSON structure introduced during the last GSoC more useful and consistent across tools.&lt;br /&gt;
# Developing Python test cases to ensure that the JSON output works correctly and to avoid future issues.&lt;br /&gt;
# Providing basic documentation and example JSON outputs for each modified tool.&lt;br /&gt;
# Adding support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
# Develop simple examples demonstrating how to use JSON output in a data science workflow, such as reading JSON data into pandas or python.&lt;br /&gt;
&lt;br /&gt;
= Timeline =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Period !! Timeline  !! Tasks   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period &lt;br /&gt;
||&lt;br /&gt;
May 8 - June 1  &lt;br /&gt;
|| &lt;br /&gt;
# Reviewed the work done during the last GSoC to stabilize the JSON output.&lt;br /&gt;
# Discussed the priority tools for adding JSON support.&lt;br /&gt;
# Read GRASS documentation to add Python and JSON examples to the documentation.&lt;br /&gt;
|| &lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;13&amp;quot; | Official Coding Period &lt;br /&gt;
|-&lt;br /&gt;
| '''Week 1''' (June 2 - June 8) || &lt;br /&gt;
# Add JSON support for g.mapset [https://github.com/OSGeo/grass/pull/5810 #5810]&lt;br /&gt;
# Fix uninitialized zone_value in r.univar [https://github.com/OSGeo/grass/pull/5821 #5821]&lt;br /&gt;
# Add JSON support for r.what.color [https://github.com/OSGeo/grass/pull/5822 #5822]&lt;br /&gt;
# Update test file in r.info [https://github.com/OSGeo/grass/pull/5842 #5842]&lt;br /&gt;
# Improve interface for r.info [https://github.com/OSGeo/grass/pull/5859 #5859]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 2''' (June 9 - June 15) ||&lt;br /&gt;
# Add JSON support for g.version [https://github.com/OSGeo/grass/pull/5863 #5863]&lt;br /&gt;
# Add JSON support for i.group [https://github.com/OSGeo/grass/pull/5870 #5870]&lt;br /&gt;
# Add test file in r.stats [https://github.com/OSGeo/grass/pull/5879 #5879]&lt;br /&gt;
# Add tests for JSON output in r.stats [https://github.com/OSGeo/grass/pull/5892 #5892]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 3''' (June 16 - June 22) ||&lt;br /&gt;
# Update the JSON output schema of v.distance [https://github.com/OSGeo/grass/pull/5898 #5898]&lt;br /&gt;
# Fix uninitialized window variable in r.stats [https://github.com/OSGeo/grass/pull/5900 #5900]&lt;br /&gt;
# Add test file in g.list [https://github.com/OSGeo/grass/pull/5906 #5906]&lt;br /&gt;
# Add JSON support for g.list [https://github.com/OSGeo/grass/pull/5921 #5921]&lt;br /&gt;
# Update the JSON output schema of g.region [https://github.com/OSGeo/grass/pull/5929 #5929]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 4''' (June 23 - June 29) ||&lt;br /&gt;
# Update the JSON output schema of v.to.db [https://github.com/OSGeo/grass/pull/5946 #5946]&lt;br /&gt;
# Update the JSON output schema of r.profile [https://github.com/OSGeo/grass/pull/5962 #5962]&lt;br /&gt;
# Add SHELL and CSV output support for r.univar [https://github.com/OSGeo/grass/pull/5966 #5966]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 5''' (June 30 - July 6) ||&lt;br /&gt;
# Add test file in r.regression.line [https://github.com/OSGeo/grass/pull/5990 #5990]&lt;br /&gt;
# Add JSON support for r.regression.line [https://github.com/OSGeo/grass/pull/5993 #5993]&lt;br /&gt;
# Add test file in r.stats.quantile [https://github.com/OSGeo/grass/pull/6002 #6002]&lt;br /&gt;
# Add JSON support for r.stats.quantile [https://github.com/OSGeo/grass/pull/6007 #6007]&lt;br /&gt;
# Add test file in r.volume [https://github.com/OSGeo/grass/pull/6027 #6027]&lt;br /&gt;
# Add JSON support for r.volume [https://github.com/OSGeo/grass/pull/6036 #6036]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 6''' (July 7 - July 13) ||&lt;br /&gt;
# Add JSON support for db.columns [https://github.com/OSGeo/grass/pull/6042 #6042]&lt;br /&gt;
# Add test file in m.measure [https://github.com/OSGeo/grass/pull/6051 #6051]&lt;br /&gt;
# Add test file in db.connect [https://github.com/OSGeo/grass/pull/6052 #6052]&lt;br /&gt;
# Add JSON support for m.measure [https://github.com/OSGeo/grass/pull/6053 #6053]&lt;br /&gt;
# Add JSON support for db.connect [https://github.com/OSGeo/grass/pull/6059 #6059]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | '''Week 7''' (July 14 - July 20) ||&lt;br /&gt;
# Add test file in r.regression.multi [https://github.com/OSGeo/grass/pull/6066 #6066]&lt;br /&gt;
# Add test file in v.db.connect [https://github.com/OSGeo/grass/pull/6067 #6067]&lt;br /&gt;
# Add JSON support for r.regression.multi [https://github.com/OSGeo/grass/pull/6075 #6075]&lt;br /&gt;
# Add JSON support for v.db.connect [https://github.com/OSGeo/grass/pull/6077 #6077]&lt;br /&gt;
# Submit MidTerm evaluation.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 8''' (July 21 - July 27) ||&lt;br /&gt;
# Add JSON support for g.findfile [https://github.com/OSGeo/grass/pull/6091 #6091]&lt;br /&gt;
# Add test file in r3.info [https://github.com/OSGeo/grass/pull/6098 #6098]&lt;br /&gt;
# Add JSON support for r3.info [https://github.com/OSGeo/grass/pull/6103 #6103]&lt;br /&gt;
# Add test file in v.what.rast [https://github.com/OSGeo/grass/pull/6109 #6109]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 9''' (July 28 - August 3) ||&lt;br /&gt;
# Update format to CSV instead of shell in v.category [https://github.com/OSGeo/grass/pull/6132 #6132]&lt;br /&gt;
# Add CSV output support to r.stats [https://github.com/OSGeo/grass/pull/6133 #6133]&lt;br /&gt;
# Add CSV headers to r.volume [https://github.com/OSGeo/grass/pull/6134 #6134]&lt;br /&gt;
# Add JSON support for v.what.rast [https://github.com/OSGeo/grass/pull/6140 #6140]&lt;br /&gt;
# Add CSV output support to r.profile [https://github.com/OSGeo/grass/pull/6145 #6145]&lt;br /&gt;
# Update test cases in r.distance [https://github.com/OSGeo/grass/pull/6150 #6150]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 10''' (August 4 - August 10) ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 11''' (August 11 - August 17) ||&lt;br /&gt;
# Add JSON and CSV support for r.distance [https://github.com/OSGeo/grass/pull/6204 #6204]&lt;br /&gt;
# Add more test cases in v.class [https://github.com/OSGeo/grass/pull/6205 #6205]&lt;br /&gt;
# Add JSON and CSV support for v.class [https://github.com/OSGeo/grass/pull/6210 #6210]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 12''' (August 18 - August 24) ||&lt;br /&gt;
# Update JSON output format for v.what [https://github.com/OSGeo/grass/pull/6252 #6252]&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Evaluation Period &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | August 25 - September 1 ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
# Submit code, final evaluation and write the final GSoC report.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Reports =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* Introduced myself on the [https://discourse.osgeo.org/t/gsoc-2025-introduction-nishant-bansal/147005 OSGeo Discourse mailing list].&lt;br /&gt;
* Created both my [https://wiki.osgeo.org/wiki/User:Nishantbansal2003 personal Wiki page] and the [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C project Wiki page], adding all necessary project-related information.&lt;br /&gt;
* Read GRASS documentation to support the addition of Python and JSON examples.&lt;br /&gt;
* Worked on the following pull requests:&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5688 #5688]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5773 #5773]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5775 #5775]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5784 #5784]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5785 #5785]&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to the g.mapset and r.what.color modules.&lt;br /&gt;
* If time permits, I will begin improving the r.info interface: [https://github.com/OSGeo/grass/issues/5793 Issue #5793]&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
'''Project Discussions and Meetings'''&lt;br /&gt;
* '''14 May 2025''': Introductory meeting discussing JSON support and overall project milestones.&lt;br /&gt;
* '''21 May 2025''': Introduction with fellow developers. Discussed priority tools, adding Python/Pandas examples, and approaches for finalizing the JSON schema for each module.&lt;br /&gt;
&lt;br /&gt;
== Week-1 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.mapset''': Added JSON output support, now you can use -p and -l flags to get JSON-formatted results.&lt;br /&gt;
* '''r.univar''': Fixed a bug causing an uninitialized zone_value.&lt;br /&gt;
* '''r.what.color''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5822 #5822])&lt;br /&gt;
* '''r.info (regression tests)''': To maintain backward compatibility while updating its interface, I added strong regression tests.&lt;br /&gt;
* '''r.info (interface improvements)''': Began improving the module’s interface. (See PR [https://github.com/OSGeo/grass/pull/5859 #5859])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.version (see issue [https://github.com/OSGeo/grass/issues/5816 #5816]).&lt;br /&gt;
* Add JSON output support to i.group (see issue [https://github.com/OSGeo/grass/issues/5815 #5815]).&lt;br /&gt;
* If time permits, write tests for r.stats (see issue [https://github.com/OSGeo/grass/issues/5814 #5814]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-2 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.version''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5863 #5863])&lt;br /&gt;
* '''i.group''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5870 #5870])&lt;br /&gt;
* '''r.stats (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats''': Added tests for JSON output; this uncovered a bug, which was fixed alongside.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.distance (see issue [https://github.com/OSGeo/grass/issues/5846 #5846]).&lt;br /&gt;
* Add JSON output support to g.list (see issue [https://github.com/OSGeo/grass/issues/5848 #5848]).&lt;br /&gt;
* If time permits, fix the JSON output format of g.region (see issue [https://github.com/OSGeo/grass/issues/5828 #5828]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-3 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.distance''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5898 #5898])&lt;br /&gt;
* '''r.stats''': Fixed a bug causing an uninitialized &amp;lt;code&amp;gt;window&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
* '''g.list (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''g.list''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5921 #5921])&lt;br /&gt;
* '''g.region''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5929 #5929])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.to.db (see issue [https://github.com/OSGeo/grass/pull/5711 #5711]).&lt;br /&gt;
* Update JSON output format and documentation of r.profile (see issue [https://github.com/OSGeo/grass/pull/5834 #5834]).&lt;br /&gt;
* If time permits, add shell and csv output formats to r.univar (see issue [https://github.com/OSGeo/grass/pull/5824 #5824]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-4 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.to.db''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5946 #5946])&lt;br /&gt;
* '''r.profile''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5962 #5962])&lt;br /&gt;
* '''r.univar''': Implemented SHELL and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/5966 #5966])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.regression.line (see issue [https://github.com/OSGeo/grass/pull/5950 #5950]).&lt;br /&gt;
* Add JSON output support to r.stats.quantile (see issue [https://github.com/OSGeo/grass/pull/5951 #5951]).&lt;br /&gt;
* Add JSON output support to r.volume (see issue [https://github.com/OSGeo/grass/pull/5949 #5949]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-5 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.line (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.line''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5993 #5993])&lt;br /&gt;
* '''r.stats.quantile (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats.quantile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6007 #6007])&lt;br /&gt;
* '''r.volume (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.volume''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6036 #6036])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to m.measure (see issue [https://github.com/OSGeo/grass/pull/6006 #6006]).&lt;br /&gt;
* Add JSON output support to db.columns (see issue [https://github.com/OSGeo/grass/pull/6008 #6008]).&lt;br /&gt;
* Add JSON output support to db.connect (see issue [https://github.com/OSGeo/grass/pull/6009 #6009]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-6 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''db.columns''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6042 #6042])&lt;br /&gt;
* '''m.measure (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''m.measure''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6053 #6053])&lt;br /&gt;
* '''db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6059 #6059])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to v.db.connect (see issue [https://github.com/OSGeo/grass/pull/6014 #6014]).&lt;br /&gt;
* Add JSON output support to r.regression.multi (see issue [https://github.com/OSGeo/grass/pull/6010 #6010]).&lt;br /&gt;
* If time permits, add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* If time permits, add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-7 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.multi (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''v.db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.multi''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6075 #6075])&lt;br /&gt;
* '''v.db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6077 #6077])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* Add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
* If time permits, add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-8 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.findfile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6091 #6091])&lt;br /&gt;
* '''r3.info (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a flag-handling bug.&lt;br /&gt;
* '''r3.info''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6103 #6103])&lt;br /&gt;
* '''v.what.rast (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a sorting bug.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
* Update format to CSV instead of shell in v.category (see issue [https://github.com/OSGeo/grass/pull/6025 #6025]).&lt;br /&gt;
* Add CSV output support to r.stats (see issue [https://github.com/OSGeo/grass/issues/5835 #5835]).&lt;br /&gt;
* If time permits, add CSV output support to r.profile (see issue [https://github.com/OSGeo/grass/issues/5958 #5958]).&lt;br /&gt;
* If time permits, add CSV headers to r.volume (see issue [https://github.com/OSGeo/grass/issues/6049 #6049]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I don’t have any blockers this week. However, I’ll be a little busy with some personal work from August 3 to August 10, so I’ll try to complete next week’s tasks this week itself.&lt;br /&gt;
&lt;br /&gt;
== Week-9 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.category''': Updated format to CSV instead of shell. (See PR [https://github.com/OSGeo/grass/pull/6132 #6132])&lt;br /&gt;
* '''r.stats''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6133 #6133])&lt;br /&gt;
* '''r.volume''': Implemented CSV column headers support. (See PR [https://github.com/OSGeo/grass/pull/6134 #6134])&lt;br /&gt;
* '''v.what.rast''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6140 #6140])&lt;br /&gt;
* '''r.profile''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6145 #6145])&lt;br /&gt;
* '''r.distance (regression tests)''': Updated regression tests to ensure backward compatibility with new JSON support. (See PR [https://github.com/OSGeo/grass/pull/6150 #6150])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* I’ll be a bit busy with some personal work from August 3 to 10, so I completed next week’s tasks last week itself. I’ve already informed my mentors about my limited availability.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* Yes, I’ll be a bit busy with some personal work from August 3 to 10.&lt;br /&gt;
&lt;br /&gt;
== Week-10 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* This week I was busy with some personal work, so I did not complete any additional tasks. However, I had already finished this week’s tasks last week. This week, I mostly focused on handling reviews for those PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.distance (see issue [https://github.com/OSGeo/grass/issues/6135 #6135]).&lt;br /&gt;
* Add JSON output support to v.class (see issue [https://github.com/OSGeo/grass/issues/6136 #6136]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-11 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.distance''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6204 #6204])&lt;br /&gt;
* '''v.class''': Updated regression tests to ensure backward compatibility with new JSON support and fixed a out-of-bounds bug. (See PR [https://github.com/OSGeo/grass/pull/6205 #6205])&lt;br /&gt;
* '''v.class''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6210 #6210])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Discuss next week’s tasks with my mentors, if no issues are assigned, I’ll identify tools that currently lack JSON support and evaluate which ones are feasible to add it to.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-12 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.what''': Update JSON output format. (See PR [https://github.com/OSGeo/grass/pull/6252 #6252])&lt;br /&gt;
* Addressed review comments on my open PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
= Final Report =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Title''' || Add JSON output to different tools in C for GRASS&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo (Open Source Geospatial Foundation)]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''Program''' || Google Summer of Code 2025&lt;br /&gt;
|-&lt;br /&gt;
| '''Contributions''' || [https://github.com/OSGeo/grass/pulls?q=is%3Apr+author%3ANishantBansal2003+ Pull Requests]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
During my GSoC project, I addressed the challenge that most GRASS tools produced only plain text output, forcing users to write custom parsing code for Python-based workflows. The task was to make these tools more data-science friendly by adding structured output formats. To achieve this, I extended the use of the Parson library to implement consistent JSON output across multiple modules, refined the JSON structure introduced in the previous GSoC, and added optional support for SHELL and CSV outputs where appropriate. I developed comprehensive Python test cases, ensured backward compatibility, and provided documentation with practical examples such as loading JSON into pandas. As a result, GRASS users can now directly consume structured outputs in modern workflows, reducing parsing overhead, improving interoperability, and paving the way for broader adoption of GRASS in data science contexts.&lt;br /&gt;
&lt;br /&gt;
== The state of integration BEFORE the start of GSoC ==&lt;br /&gt;
Before the start of GSoC, the integration of GRASS with data science workflows was limited due to several challenges. The JSON outputs introduced in the previous GSoC contained deeply nested hierarchies, making them difficult to use directly with libraries such as '''pandas''' or in broader data science pipelines. While some tools already supported JSON (e.g., &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;), many important and highly demanded modules lacked JSON support, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt; and many more. This lack of consistency limited the seamless adoption of GRASS in analytics and machine learning contexts. Moreover, there was no clear '''documentation of the JSON schema''' or guidance on how to parse and utilize these outputs effectively in '''python or pandas''', which made it difficult for users to understand the use cases and integrate GRASS outputs into modern data science workflows.&lt;br /&gt;
&lt;br /&gt;
== The state of integration AFTER GSoC ==&lt;br /&gt;
&lt;br /&gt;
After GSoC, the integration state of JSON and alternative output formats in GRASS has significantly improved. I refactored the JSON structures for tools such as &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;, and others, removing unnecessary nesting introduced during the previous GSoC. This makes their outputs much easier to consume directly in &amp;lt;b&amp;gt;Python&amp;lt;/b&amp;gt; or with &amp;lt;b&amp;gt;pandas&amp;lt;/b&amp;gt;. In addition, JSON support has been extended to many essential and frequently used modules, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;, and many more. I also added detailed documentation of the JSON schema and provided examples showing how to parse and use these outputs effectively with Python and pandas. Together, these improvements make the adoption of GRASS in modern &amp;lt;b&amp;gt;data science workflows&amp;lt;/b&amp;gt; far more seamless and accessible.&lt;br /&gt;
&lt;br /&gt;
=== Enhancements made per tool ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;: Simplified JSON structure for univariate statistics, removed unnecessary hierarchy, and added new output format options (CSV, shell).&lt;br /&gt;
* &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;: Added JSON support for querying raster map colors, with a Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;: Added JSON support for reporting the current mapset, with a Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;: Updated JSON structure for raster map metadata, removing hierarchy for easier parsing. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;: Simplified JSON output for geographic region boundaries, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;: Added JSON support for GRASS version information, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;: Added JSON support for listing imagery groups, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;: Added JSON and CSV support for raster area statistics, with Python and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;: Refined JSON schema for nearest element queries, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;: Added JSON support for listing GRASS database files, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;: Updated JSON schema for printing vector attribute values, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;: Simplified JSON output, added CSV support, and included a matplotlib example for profile visualization.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;: Updated JSON schema for linear regression between rasters, with Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;: Updated JSON schema for category quantiles, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;: Added JSON support for raster volume calculations, fixed missing headers in CSV output, and provided pandas examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.columns&amp;lt;/code&amp;gt;: Added JSON output for listing database table columns, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;: Added JSON output for measuring lengths and areas, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.connect&amp;lt;/code&amp;gt;: Added JSON output for DB connection info, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.multi&amp;lt;/code&amp;gt;: Added JSON output for multiple regression between rasters, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.db.connect&amp;lt;/code&amp;gt;: Added JSON output for vector map attribute connections, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.findfile&amp;lt;/code&amp;gt;: Added JSON output for GRASS database file search, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;: Added JSON output for 3D raster map info, with Python example. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;: Added JSON output for extracting raster values at vector points, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt;: Added JSON and CSV support for locating closest points between raster objects, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;: Added JSON and CSV support for attribute data, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;: Migrated from manually written JSON to Parson-based JSON output, simplified schema, and provided Python parsing examples.&lt;br /&gt;
&lt;br /&gt;
All these changes were accompanied by regression tests to ensure that new JSON/CSV/SHELL/PLAIN output options do not break existing functionality. Additionally, I introduced comprehensive Python test cases for these outputs, making the enhancements reliable and future-proof. During this work, I also fixed several bugs in modules such as &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;, strengthening the stability of GRASS as a whole.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
To sum up, I’m glad to have met the three core objectives of my project with the constant support of my mentors:&lt;br /&gt;
&lt;br /&gt;
* Brought JSON output to several important and long-requested modules, added regression tests, and ensured reliable future test coverage.&lt;br /&gt;
* Enhanced the JSON schema introduced in last year’s GSoC by reducing unnecessary hierarchy, making it more consistent across tools, and providing Python/Pandas examples for practical use.&lt;br /&gt;
* Expanded &amp;lt;b&amp;gt;CSV&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;SHELL&amp;lt;/b&amp;gt; output formats to additional tools where they could bring value.&lt;br /&gt;
&lt;br /&gt;
This journey has been both rewarding and educational, and I’m grateful for the opportunity to contribute to GRASS through GSoC 2025. I especially want to thank &amp;lt;b&amp;gt;Anna Petrasova&amp;lt;/b&amp;gt; and the GRASS Development Team for their guidance and support. I’m excited to keep building on this work and further extend JSON and other features in the future.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
There is significant scope to extend structured output support across GRASS tools. In particular, future efforts should focus on:&lt;br /&gt;
* Expanding JSON output to additional modules, with details tracked here: [https://github.com/orgs/OSGeo/projects/10 GRASS JSON Outputs Project].&lt;br /&gt;
* Refining and standardizing the JSON schema to better support complex workflows and integrations.&lt;br /&gt;
* Exploring and implementing other output formats (e.g., SHELL, CSV, PLAIN) where they can improve usability and automation.&lt;br /&gt;
I also plan to continue contributing to GRASS by extending JSON support to more modules and engaging in community discussions around schema design and format integration.&lt;br /&gt;
&lt;br /&gt;
== Log of Pull Requests ==&lt;br /&gt;
Below is a list of pull requests submitted to the GRASS repository during GSoC 2025:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pull Request !! Description  !! Date   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5688 #5688] || r.univar: Fix JSON structure || May 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5773 #5773] || r.what.color: Add test file || May 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5775 #5775] || g.mapset: Add test file || May 26, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5784 #5784] || r.info: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;Closed&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5785 #5785] || g.region: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5810 #5810] || g.mapset: Add JSON support || June 2, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5821 #5821] || r.univar: Fix uninitialized zone_value || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5822 #5822] || r.what.color: Add JSON support || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5842 #5842] || r.info: Update test file || June 5, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5859 #5859] || r.info: Improve interface || June 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5863 #5863] || g.version: Add JSON support || June 9, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5870 #5870] || i.group: Add JSON support || June 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5879 #5879] || r.stats: Add test file || June 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5892 #5892] || r.stats: Add tests for JSON output || June 14, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5898 #5898] || v.distance: Update JSON format || June 16, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5900 #5900] || r.stats: fix uninitialised window value || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5906 #5906] || g.list: Add test file || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5921 #5921] || g.list: Add JSON support || June 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5929 #5929] || g.region: Update JSON format || June 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5946 #5946] || v.to.db: Update JSON format || June 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5962 #5962] || r.profile: Update JSON format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5966 #5966] || r.univar: Add shell and CSV format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5990 #5990] || r.regression.line: Add test file || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5993 #5993] || r.regression.line: Add JSON support || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6002 #6002] || r.stats.quantile: Add test file || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6007 #6007] || r.stats.quantile: Add JSON support || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6027 #6027] || r.volume: Add test file || July 4, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6036 #6036] || r.volume: Add JSON support || July 6, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6042 #6042] || db.columns: Add JSON support || July 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6051 #6051] || m.measure: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6052 #6052] || db.connect: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6053 #6053] || m.measure: Add JSON support || July 11, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6059 #6059] || db.connect: Add JSON support || July 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6066 #6066] || r.regression.multi: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6067 #6067] || v.db.connect: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6075 #6075] || r.regression.multi: Add JSON support || July 18, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6077 #6077] || v.db.connect: Add JSON support || July 19, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6091 #6091] || g.findfile: Add JSON support || July 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6098 #6098] || r3.info: Add test file || July 22, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6103 #6103] || r3.info: Add JSON support || July 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6109 #6109] || v.what.rast: Add test file || July 24, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6132 #6132] || v.category: Use CSV format instead of shell format || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6133 #6133] || r.stats: add CSV support || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6134 #6134] || r.volume: add csv column headers || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6140 #6140] || v.what.rast: Add JSON support || July 29, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6145 #6145] || r.profile: Add CSV support || July 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6150 #6150] || r.distance: Update existing test cases || August 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6204 #6204] || r.distance: Add JSON and CSV support || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6205 #6205] || v.class: Add more test cases and fix out-of-bounds bug || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6210 #6210] || v.class: Add JSON and CSV support || August 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6252 #6252] || v.what: Update JSON output format || August 23, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Additional Links ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Ttile&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| OSGeo Wiki Page&lt;br /&gt;
| [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C Add JSON output to different tools in C for GRASS]&lt;br /&gt;
|-&lt;br /&gt;
| Github Fork&lt;br /&gt;
| [https://github.com/NishantBansal2003/grass GitHub Fork]&lt;br /&gt;
|-&lt;br /&gt;
| GSoC Page&lt;br /&gt;
| [https://summerofcode.withgoogle.com/programs/2025/projects/GPVGd3DH Link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples &amp;amp; Images ==&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; JSON output in Python ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; can be directly loaded into a pandas DataFrame and used for plotting with matplotlib.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
# Run r.profile command&lt;br /&gt;
elevation = gs.read_command(&lt;br /&gt;
    &amp;quot;r.profile&amp;quot;,&lt;br /&gt;
    input=&amp;quot;elevation&amp;quot;,&lt;br /&gt;
    coordinates=&amp;quot;641712,226095,641546,224138,641546,222048,641049,221186&amp;quot;,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
    flags=&amp;quot;gc&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Load the JSON data into a dataframe&lt;br /&gt;
df = pd.read_json(elevation)&lt;br /&gt;
print(df)&lt;br /&gt;
&lt;br /&gt;
# Create the scatter plot&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
plt.scatter(df[&amp;quot;distance&amp;quot;], df[&amp;quot;value&amp;quot;], c=df[&amp;quot;color&amp;quot;], marker=&amp;quot;o&amp;quot;)&lt;br /&gt;
plt.title(&amp;quot;Profile of Distance vs. Elevation with Color Coding&amp;quot;)&lt;br /&gt;
plt.xlabel(&amp;quot;Distance (meters)&amp;quot;)&lt;br /&gt;
plt.ylabel(&amp;quot;Elevation&amp;quot;)&lt;br /&gt;
plt.grid(True)&lt;br /&gt;
plt.show()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame Output (first 10 rows) ====  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
         easting       northing   distance      value    color&lt;br /&gt;
0  641712.000000  226095.000000   0.000000  84.661507  #71FF00&lt;br /&gt;
1  641711.154826  226085.036106   9.999675  84.511765  #6FFF00&lt;br /&gt;
2  641710.309651  226075.072213  19.999349  84.241806  #6BFF00&lt;br /&gt;
3  641709.464477  226065.108319  29.999024  84.304214  #6CFF00&lt;br /&gt;
4  641708.619302  226055.144426  39.998699  84.174400  #6AFF00&lt;br /&gt;
5  641707.774128  226045.180532  49.998374  84.112534  #6AFF00&lt;br /&gt;
6  641706.928954  226035.216639  59.998048  84.011208  #68FF00&lt;br /&gt;
7  641706.083779  226025.252745  69.997723  83.834084  #66FF00&lt;br /&gt;
8  641705.238605  226015.288851  79.997398  83.870193  #67FF00&lt;br /&gt;
9  641704.393430  226005.324958  89.997073  84.194908  #6BFF00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Visualization ====  &lt;br /&gt;
&lt;br /&gt;
Matplotlib scatter plot generated from the &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; JSON output: &lt;br /&gt;
&lt;br /&gt;
[[File:R profile plot.png]]&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt; JSON output with Pandas ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt; can be directly loaded into a pandas DataFrame.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
&lt;br /&gt;
data = gs.parse_command(&lt;br /&gt;
    &amp;quot;v.class&amp;quot;,&lt;br /&gt;
    map=&amp;quot;bridges&amp;quot;,&lt;br /&gt;
    column=&amp;quot;YEAR_BUILT&amp;quot;,&lt;br /&gt;
    algorithm=&amp;quot;std&amp;quot;,&lt;br /&gt;
    nbclasses=5,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df = pd.DataFrame(data[&amp;quot;intervals&amp;quot;])&lt;br /&gt;
print(df)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame output (intervals) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
          from           to  frequency&lt;br /&gt;
0  1891.000000  1938.829689        750&lt;br /&gt;
1  1938.829689  1954.722836       1841&lt;br /&gt;
2  1954.722836  1970.615983       5556&lt;br /&gt;
3  1970.615983  1986.509130       1788&lt;br /&gt;
4  1986.509130  1997.000000       1003&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{GSoC}}&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28665</id>
		<title>GRASS GSoC 2025 Add JSON output to different tools in C</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28665"/>
		<updated>2025-08-24T06:40:44Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: /* Examples &amp;amp; Images */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Nishant Bansal&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo - Open Source Geospatial Foundation]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/NishantBansal2003/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''GSoC proposal''' || [https://docs.google.com/document/d/1ZPQ9RXU7b_RUDmBmAMeK7ZjFAV1WC7Urd1Zlz678jyw/edit?tab=t.0#heading=h.z6ne0og04bp5 View Proposal]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Abstract =&lt;br /&gt;
Currently, most GRASS tools produce data in plain text by default. This means that users who want to process the output in Python need to create custom parsing code. To make this easier, several modules could be improved by oﬀering JSON as an alternative output format. Recently, the Parson library was added to the GRASS codebase to support JSON output in addition to plain text. Building on the advancements made during the last GSoC, my project aims to expand JSON output capabilities to more tools using the Parson library. I will also work on making the JSON structure introduced in the previous GSoC more useful and consistent. Additionally, I plan to add support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
&lt;br /&gt;
# Working with mentors to finalize the structure of the JSON output.&lt;br /&gt;
# Adding an option to choose the output format (plain text or JSON) for each updated tool.&lt;br /&gt;
# Make the JSON structure introduced during the last GSoC more useful and consistent across tools.&lt;br /&gt;
# Developing Python test cases to ensure that the JSON output works correctly and to avoid future issues.&lt;br /&gt;
# Providing basic documentation and example JSON outputs for each modified tool.&lt;br /&gt;
# Adding support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
# Develop simple examples demonstrating how to use JSON output in a data science workflow, such as reading JSON data into pandas or python.&lt;br /&gt;
&lt;br /&gt;
= Timeline =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Period !! Timeline  !! Tasks   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period &lt;br /&gt;
||&lt;br /&gt;
May 8 - June 1  &lt;br /&gt;
|| &lt;br /&gt;
# Reviewed the work done during the last GSoC to stabilize the JSON output.&lt;br /&gt;
# Discussed the priority tools for adding JSON support.&lt;br /&gt;
# Read GRASS documentation to add Python and JSON examples to the documentation.&lt;br /&gt;
|| &lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;13&amp;quot; | Official Coding Period &lt;br /&gt;
|-&lt;br /&gt;
| '''Week 1''' (June 2 - June 8) || &lt;br /&gt;
# Add JSON support for g.mapset [https://github.com/OSGeo/grass/pull/5810 #5810]&lt;br /&gt;
# Fix uninitialized zone_value in r.univar [https://github.com/OSGeo/grass/pull/5821 #5821]&lt;br /&gt;
# Add JSON support for r.what.color [https://github.com/OSGeo/grass/pull/5822 #5822]&lt;br /&gt;
# Update test file in r.info [https://github.com/OSGeo/grass/pull/5842 #5842]&lt;br /&gt;
# Improve interface for r.info [https://github.com/OSGeo/grass/pull/5859 #5859]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 2''' (June 9 - June 15) ||&lt;br /&gt;
# Add JSON support for g.version [https://github.com/OSGeo/grass/pull/5863 #5863]&lt;br /&gt;
# Add JSON support for i.group [https://github.com/OSGeo/grass/pull/5870 #5870]&lt;br /&gt;
# Add test file in r.stats [https://github.com/OSGeo/grass/pull/5879 #5879]&lt;br /&gt;
# Add tests for JSON output in r.stats [https://github.com/OSGeo/grass/pull/5892 #5892]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 3''' (June 16 - June 22) ||&lt;br /&gt;
# Update the JSON output schema of v.distance [https://github.com/OSGeo/grass/pull/5898 #5898]&lt;br /&gt;
# Fix uninitialized window variable in r.stats [https://github.com/OSGeo/grass/pull/5900 #5900]&lt;br /&gt;
# Add test file in g.list [https://github.com/OSGeo/grass/pull/5906 #5906]&lt;br /&gt;
# Add JSON support for g.list [https://github.com/OSGeo/grass/pull/5921 #5921]&lt;br /&gt;
# Update the JSON output schema of g.region [https://github.com/OSGeo/grass/pull/5929 #5929]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 4''' (June 23 - June 29) ||&lt;br /&gt;
# Update the JSON output schema of v.to.db [https://github.com/OSGeo/grass/pull/5946 #5946]&lt;br /&gt;
# Update the JSON output schema of r.profile [https://github.com/OSGeo/grass/pull/5962 #5962]&lt;br /&gt;
# Add SHELL and CSV output support for r.univar [https://github.com/OSGeo/grass/pull/5966 #5966]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 5''' (June 30 - July 6) ||&lt;br /&gt;
# Add test file in r.regression.line [https://github.com/OSGeo/grass/pull/5990 #5990]&lt;br /&gt;
# Add JSON support for r.regression.line [https://github.com/OSGeo/grass/pull/5993 #5993]&lt;br /&gt;
# Add test file in r.stats.quantile [https://github.com/OSGeo/grass/pull/6002 #6002]&lt;br /&gt;
# Add JSON support for r.stats.quantile [https://github.com/OSGeo/grass/pull/6007 #6007]&lt;br /&gt;
# Add test file in r.volume [https://github.com/OSGeo/grass/pull/6027 #6027]&lt;br /&gt;
# Add JSON support for r.volume [https://github.com/OSGeo/grass/pull/6036 #6036]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 6''' (July 7 - July 13) ||&lt;br /&gt;
# Add JSON support for db.columns [https://github.com/OSGeo/grass/pull/6042 #6042]&lt;br /&gt;
# Add test file in m.measure [https://github.com/OSGeo/grass/pull/6051 #6051]&lt;br /&gt;
# Add test file in db.connect [https://github.com/OSGeo/grass/pull/6052 #6052]&lt;br /&gt;
# Add JSON support for m.measure [https://github.com/OSGeo/grass/pull/6053 #6053]&lt;br /&gt;
# Add JSON support for db.connect [https://github.com/OSGeo/grass/pull/6059 #6059]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | '''Week 7''' (July 14 - July 20) ||&lt;br /&gt;
# Add test file in r.regression.multi [https://github.com/OSGeo/grass/pull/6066 #6066]&lt;br /&gt;
# Add test file in v.db.connect [https://github.com/OSGeo/grass/pull/6067 #6067]&lt;br /&gt;
# Add JSON support for r.regression.multi [https://github.com/OSGeo/grass/pull/6075 #6075]&lt;br /&gt;
# Add JSON support for v.db.connect [https://github.com/OSGeo/grass/pull/6077 #6077]&lt;br /&gt;
# Submit MidTerm evaluation.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 8''' (July 21 - July 27) ||&lt;br /&gt;
# Add JSON support for g.findfile [https://github.com/OSGeo/grass/pull/6091 #6091]&lt;br /&gt;
# Add test file in r3.info [https://github.com/OSGeo/grass/pull/6098 #6098]&lt;br /&gt;
# Add JSON support for r3.info [https://github.com/OSGeo/grass/pull/6103 #6103]&lt;br /&gt;
# Add test file in v.what.rast [https://github.com/OSGeo/grass/pull/6109 #6109]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 9''' (July 28 - August 3) ||&lt;br /&gt;
# Update format to CSV instead of shell in v.category [https://github.com/OSGeo/grass/pull/6132 #6132]&lt;br /&gt;
# Add CSV output support to r.stats [https://github.com/OSGeo/grass/pull/6133 #6133]&lt;br /&gt;
# Add CSV headers to r.volume [https://github.com/OSGeo/grass/pull/6134 #6134]&lt;br /&gt;
# Add JSON support for v.what.rast [https://github.com/OSGeo/grass/pull/6140 #6140]&lt;br /&gt;
# Add CSV output support to r.profile [https://github.com/OSGeo/grass/pull/6145 #6145]&lt;br /&gt;
# Update test cases in r.distance [https://github.com/OSGeo/grass/pull/6150 #6150]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 10''' (August 4 - August 10) ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 11''' (August 11 - August 17) ||&lt;br /&gt;
# Add JSON and CSV support for r.distance [https://github.com/OSGeo/grass/pull/6204 #6204]&lt;br /&gt;
# Add more test cases in v.class [https://github.com/OSGeo/grass/pull/6205 #6205]&lt;br /&gt;
# Add JSON and CSV support for v.class [https://github.com/OSGeo/grass/pull/6210 #6210]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 12''' (August 18 - August 24) ||&lt;br /&gt;
# Update JSON output format for v.what [https://github.com/OSGeo/grass/pull/6252 #6252]&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Evaluation Period &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | August 25 - September 1 ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
# Submit code, final evaluation and write the final GSoC report.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Reports =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* Introduced myself on the [https://discourse.osgeo.org/t/gsoc-2025-introduction-nishant-bansal/147005 OSGeo Discourse mailing list].&lt;br /&gt;
* Created both my [https://wiki.osgeo.org/wiki/User:Nishantbansal2003 personal Wiki page] and the [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C project Wiki page], adding all necessary project-related information.&lt;br /&gt;
* Read GRASS documentation to support the addition of Python and JSON examples.&lt;br /&gt;
* Worked on the following pull requests:&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5688 #5688]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5773 #5773]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5775 #5775]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5784 #5784]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5785 #5785]&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to the g.mapset and r.what.color modules.&lt;br /&gt;
* If time permits, I will begin improving the r.info interface: [https://github.com/OSGeo/grass/issues/5793 Issue #5793]&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
'''Project Discussions and Meetings'''&lt;br /&gt;
* '''14 May 2025''': Introductory meeting discussing JSON support and overall project milestones.&lt;br /&gt;
* '''21 May 2025''': Introduction with fellow developers. Discussed priority tools, adding Python/Pandas examples, and approaches for finalizing the JSON schema for each module.&lt;br /&gt;
&lt;br /&gt;
== Week-1 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.mapset''': Added JSON output support, now you can use -p and -l flags to get JSON-formatted results.&lt;br /&gt;
* '''r.univar''': Fixed a bug causing an uninitialized zone_value.&lt;br /&gt;
* '''r.what.color''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5822 #5822])&lt;br /&gt;
* '''r.info (regression tests)''': To maintain backward compatibility while updating its interface, I added strong regression tests.&lt;br /&gt;
* '''r.info (interface improvements)''': Began improving the module’s interface. (See PR [https://github.com/OSGeo/grass/pull/5859 #5859])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.version (see issue [https://github.com/OSGeo/grass/issues/5816 #5816]).&lt;br /&gt;
* Add JSON output support to i.group (see issue [https://github.com/OSGeo/grass/issues/5815 #5815]).&lt;br /&gt;
* If time permits, write tests for r.stats (see issue [https://github.com/OSGeo/grass/issues/5814 #5814]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-2 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.version''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5863 #5863])&lt;br /&gt;
* '''i.group''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5870 #5870])&lt;br /&gt;
* '''r.stats (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats''': Added tests for JSON output; this uncovered a bug, which was fixed alongside.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.distance (see issue [https://github.com/OSGeo/grass/issues/5846 #5846]).&lt;br /&gt;
* Add JSON output support to g.list (see issue [https://github.com/OSGeo/grass/issues/5848 #5848]).&lt;br /&gt;
* If time permits, fix the JSON output format of g.region (see issue [https://github.com/OSGeo/grass/issues/5828 #5828]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-3 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.distance''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5898 #5898])&lt;br /&gt;
* '''r.stats''': Fixed a bug causing an uninitialized &amp;lt;code&amp;gt;window&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
* '''g.list (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''g.list''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5921 #5921])&lt;br /&gt;
* '''g.region''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5929 #5929])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.to.db (see issue [https://github.com/OSGeo/grass/pull/5711 #5711]).&lt;br /&gt;
* Update JSON output format and documentation of r.profile (see issue [https://github.com/OSGeo/grass/pull/5834 #5834]).&lt;br /&gt;
* If time permits, add shell and csv output formats to r.univar (see issue [https://github.com/OSGeo/grass/pull/5824 #5824]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-4 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.to.db''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5946 #5946])&lt;br /&gt;
* '''r.profile''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5962 #5962])&lt;br /&gt;
* '''r.univar''': Implemented SHELL and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/5966 #5966])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.regression.line (see issue [https://github.com/OSGeo/grass/pull/5950 #5950]).&lt;br /&gt;
* Add JSON output support to r.stats.quantile (see issue [https://github.com/OSGeo/grass/pull/5951 #5951]).&lt;br /&gt;
* Add JSON output support to r.volume (see issue [https://github.com/OSGeo/grass/pull/5949 #5949]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-5 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.line (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.line''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5993 #5993])&lt;br /&gt;
* '''r.stats.quantile (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats.quantile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6007 #6007])&lt;br /&gt;
* '''r.volume (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.volume''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6036 #6036])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to m.measure (see issue [https://github.com/OSGeo/grass/pull/6006 #6006]).&lt;br /&gt;
* Add JSON output support to db.columns (see issue [https://github.com/OSGeo/grass/pull/6008 #6008]).&lt;br /&gt;
* Add JSON output support to db.connect (see issue [https://github.com/OSGeo/grass/pull/6009 #6009]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-6 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''db.columns''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6042 #6042])&lt;br /&gt;
* '''m.measure (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''m.measure''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6053 #6053])&lt;br /&gt;
* '''db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6059 #6059])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to v.db.connect (see issue [https://github.com/OSGeo/grass/pull/6014 #6014]).&lt;br /&gt;
* Add JSON output support to r.regression.multi (see issue [https://github.com/OSGeo/grass/pull/6010 #6010]).&lt;br /&gt;
* If time permits, add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* If time permits, add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-7 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.multi (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''v.db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.multi''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6075 #6075])&lt;br /&gt;
* '''v.db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6077 #6077])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* Add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
* If time permits, add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-8 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.findfile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6091 #6091])&lt;br /&gt;
* '''r3.info (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a flag-handling bug.&lt;br /&gt;
* '''r3.info''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6103 #6103])&lt;br /&gt;
* '''v.what.rast (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a sorting bug.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
* Update format to CSV instead of shell in v.category (see issue [https://github.com/OSGeo/grass/pull/6025 #6025]).&lt;br /&gt;
* Add CSV output support to r.stats (see issue [https://github.com/OSGeo/grass/issues/5835 #5835]).&lt;br /&gt;
* If time permits, add CSV output support to r.profile (see issue [https://github.com/OSGeo/grass/issues/5958 #5958]).&lt;br /&gt;
* If time permits, add CSV headers to r.volume (see issue [https://github.com/OSGeo/grass/issues/6049 #6049]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I don’t have any blockers this week. However, I’ll be a little busy with some personal work from August 3 to August 10, so I’ll try to complete next week’s tasks this week itself.&lt;br /&gt;
&lt;br /&gt;
== Week-9 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.category''': Updated format to CSV instead of shell. (See PR [https://github.com/OSGeo/grass/pull/6132 #6132])&lt;br /&gt;
* '''r.stats''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6133 #6133])&lt;br /&gt;
* '''r.volume''': Implemented CSV column headers support. (See PR [https://github.com/OSGeo/grass/pull/6134 #6134])&lt;br /&gt;
* '''v.what.rast''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6140 #6140])&lt;br /&gt;
* '''r.profile''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6145 #6145])&lt;br /&gt;
* '''r.distance (regression tests)''': Updated regression tests to ensure backward compatibility with new JSON support. (See PR [https://github.com/OSGeo/grass/pull/6150 #6150])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* I’ll be a bit busy with some personal work from August 3 to 10, so I completed next week’s tasks last week itself. I’ve already informed my mentors about my limited availability.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* Yes, I’ll be a bit busy with some personal work from August 3 to 10.&lt;br /&gt;
&lt;br /&gt;
== Week-10 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* This week I was busy with some personal work, so I did not complete any additional tasks. However, I had already finished this week’s tasks last week. This week, I mostly focused on handling reviews for those PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.distance (see issue [https://github.com/OSGeo/grass/issues/6135 #6135]).&lt;br /&gt;
* Add JSON output support to v.class (see issue [https://github.com/OSGeo/grass/issues/6136 #6136]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-11 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.distance''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6204 #6204])&lt;br /&gt;
* '''v.class''': Updated regression tests to ensure backward compatibility with new JSON support and fixed a out-of-bounds bug. (See PR [https://github.com/OSGeo/grass/pull/6205 #6205])&lt;br /&gt;
* '''v.class''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6210 #6210])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Discuss next week’s tasks with my mentors, if no issues are assigned, I’ll identify tools that currently lack JSON support and evaluate which ones are feasible to add it to.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-12 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.what''': Update JSON output format. (See PR [https://github.com/OSGeo/grass/pull/6252 #6252])&lt;br /&gt;
* Addressed review comments on my open PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
= Final Report =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Title''' || Add JSON output to different tools in C for GRASS&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo (Open Source Geospatial Foundation)]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''Program''' || Google Summer of Code 2025&lt;br /&gt;
|-&lt;br /&gt;
| '''Contributions''' || [https://github.com/OSGeo/grass/pulls?q=is%3Apr+author%3ANishantBansal2003+ Pull Requests]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
During my GSoC project, I addressed the challenge that most GRASS tools produced only plain text output, forcing users to write custom parsing code for Python-based workflows. The task was to make these tools more data-science friendly by adding structured output formats. To achieve this, I extended the use of the Parson library to implement consistent JSON output across multiple modules, refined the JSON structure introduced in the previous GSoC, and added optional support for SHELL and CSV outputs where appropriate. I developed comprehensive Python test cases, ensured backward compatibility, and provided documentation with practical examples such as loading JSON into pandas. As a result, GRASS users can now directly consume structured outputs in modern workflows, reducing parsing overhead, improving interoperability, and paving the way for broader adoption of GRASS in data science contexts.&lt;br /&gt;
&lt;br /&gt;
== The state of integration BEFORE the start of GSoC ==&lt;br /&gt;
Before the start of GSoC, the integration of GRASS with data science workflows was limited due to several challenges. The JSON outputs introduced in the previous GSoC contained deeply nested hierarchies, making them difficult to use directly with libraries such as '''pandas''' or in broader data science pipelines. While some tools already supported JSON (e.g., &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;), many important and highly demanded modules lacked JSON support, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt; and many more. This lack of consistency limited the seamless adoption of GRASS in analytics and machine learning contexts. Moreover, there was no clear '''documentation of the JSON schema''' or guidance on how to parse and utilize these outputs effectively in '''python or pandas''', which made it difficult for users to understand the use cases and integrate GRASS outputs into modern data science workflows.&lt;br /&gt;
&lt;br /&gt;
== The state of integration AFTER GSoC ==&lt;br /&gt;
&lt;br /&gt;
After GSoC, the integration state of JSON and alternative output formats in GRASS has significantly improved. I refactored the JSON structures for tools such as &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;, and others, removing unnecessary nesting introduced during the previous GSoC. This makes their outputs much easier to consume directly in &amp;lt;b&amp;gt;Python&amp;lt;/b&amp;gt; or with &amp;lt;b&amp;gt;pandas&amp;lt;/b&amp;gt;. In addition, JSON support has been extended to many essential and frequently used modules, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;, and many more. I also added detailed documentation of the JSON schema and provided examples showing how to parse and use these outputs effectively with Python and pandas. Together, these improvements make the adoption of GRASS in modern &amp;lt;b&amp;gt;data science workflows&amp;lt;/b&amp;gt; far more seamless and accessible.&lt;br /&gt;
&lt;br /&gt;
=== Enhancements made per tool ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;: Simplified JSON structure for univariate statistics, removed unnecessary hierarchy, and added new output format options (CSV, shell).&lt;br /&gt;
* &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;: Added JSON support for querying raster map colors, with a Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;: Added JSON support for reporting the current mapset, with a Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;: Updated JSON structure for raster map metadata, removing hierarchy for easier parsing. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;: Simplified JSON output for geographic region boundaries, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;: Added JSON support for GRASS version information, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;: Added JSON support for listing imagery groups, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;: Added JSON and CSV support for raster area statistics, with Python and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;: Refined JSON schema for nearest element queries, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;: Added JSON support for listing GRASS database files, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;: Updated JSON schema for printing vector attribute values, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;: Simplified JSON output, added CSV support, and included a matplotlib example for profile visualization.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;: Updated JSON schema for linear regression between rasters, with Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;: Updated JSON schema for category quantiles, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;: Added JSON support for raster volume calculations, fixed missing headers in CSV output, and provided pandas examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.columns&amp;lt;/code&amp;gt;: Added JSON output for listing database table columns, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;: Added JSON output for measuring lengths and areas, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.connect&amp;lt;/code&amp;gt;: Added JSON output for DB connection info, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.multi&amp;lt;/code&amp;gt;: Added JSON output for multiple regression between rasters, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.db.connect&amp;lt;/code&amp;gt;: Added JSON output for vector map attribute connections, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.findfile&amp;lt;/code&amp;gt;: Added JSON output for GRASS database file search, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;: Added JSON output for 3D raster map info, with Python example. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;: Added JSON output for extracting raster values at vector points, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt;: Added JSON and CSV support for locating closest points between raster objects, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;: Added JSON and CSV support for attribute data, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;: Migrated from manually written JSON to Parson-based JSON output, simplified schema, and provided Python parsing examples.&lt;br /&gt;
&lt;br /&gt;
All these changes were accompanied by regression tests to ensure that new JSON/CSV/SHELL/PLAIN output options do not break existing functionality. Additionally, I introduced comprehensive Python test cases for these outputs, making the enhancements reliable and future-proof. During this work, I also fixed several bugs in modules such as &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;, strengthening the stability of GRASS as a whole.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
To sum up, I’m glad to have met the three core objectives of my project with the constant support of my mentors:&lt;br /&gt;
&lt;br /&gt;
* Brought JSON output to several important and long-requested modules, added regression tests, and ensured reliable future test coverage.&lt;br /&gt;
* Enhanced the JSON schema introduced in last year’s GSoC by reducing unnecessary hierarchy, making it more consistent across tools, and providing Python/Pandas examples for practical use.&lt;br /&gt;
* Expanded &amp;lt;b&amp;gt;CSV&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;SHELL&amp;lt;/b&amp;gt; output formats to additional tools where they could bring value.&lt;br /&gt;
&lt;br /&gt;
This journey has been both rewarding and educational, and I’m grateful for the opportunity to contribute to GRASS through GSoC 2025. I especially want to thank &amp;lt;b&amp;gt;Anna Petrasova&amp;lt;/b&amp;gt; and the GRASS Development Team for their guidance and support. I’m excited to keep building on this work and further extend JSON and other features in the future.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
There is significant scope to extend structured output support across GRASS tools. In particular, future efforts should focus on:&lt;br /&gt;
* Expanding JSON output to additional modules, with details tracked here: [https://github.com/orgs/OSGeo/projects/10 GRASS JSON Outputs Project].&lt;br /&gt;
* Refining and standardizing the JSON schema to better support complex workflows and integrations.&lt;br /&gt;
* Exploring and implementing other output formats (e.g., SHELL, CSV, PLAIN) where they can improve usability and automation.&lt;br /&gt;
I also plan to continue contributing to GRASS by extending JSON support to more modules and engaging in community discussions around schema design and format integration.&lt;br /&gt;
&lt;br /&gt;
== Log of Pull Requests ==&lt;br /&gt;
Below is a list of pull requests submitted to the GRASS repository during GSoC 2025:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pull Request !! Description  !! Date   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5688 #5688] || r.univar: Fix JSON structure || May 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5773 #5773] || r.what.color: Add test file || May 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5775 #5775] || g.mapset: Add test file || May 26, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5784 #5784] || r.info: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;Closed&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5785 #5785] || g.region: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5810 #5810] || g.mapset: Add JSON support || June 2, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5821 #5821] || r.univar: Fix uninitialized zone_value || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5822 #5822] || r.what.color: Add JSON support || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5842 #5842] || r.info: Update test file || June 5, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5859 #5859] || r.info: Improve interface || June 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5863 #5863] || g.version: Add JSON support || June 9, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5870 #5870] || i.group: Add JSON support || June 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5879 #5879] || r.stats: Add test file || June 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5892 #5892] || r.stats: Add tests for JSON output || June 14, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5898 #5898] || v.distance: Update JSON format || June 16, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5900 #5900] || r.stats: fix uninitialised window value || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5906 #5906] || g.list: Add test file || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5921 #5921] || g.list: Add JSON support || June 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5929 #5929] || g.region: Update JSON format || June 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5946 #5946] || v.to.db: Update JSON format || June 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5962 #5962] || r.profile: Update JSON format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5966 #5966] || r.univar: Add shell and CSV format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5990 #5990] || r.regression.line: Add test file || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5993 #5993] || r.regression.line: Add JSON support || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6002 #6002] || r.stats.quantile: Add test file || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6007 #6007] || r.stats.quantile: Add JSON support || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6027 #6027] || r.volume: Add test file || July 4, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6036 #6036] || r.volume: Add JSON support || July 6, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6042 #6042] || db.columns: Add JSON support || July 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6051 #6051] || m.measure: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6052 #6052] || db.connect: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6053 #6053] || m.measure: Add JSON support || July 11, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6059 #6059] || db.connect: Add JSON support || July 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6066 #6066] || r.regression.multi: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6067 #6067] || v.db.connect: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6075 #6075] || r.regression.multi: Add JSON support || July 18, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6077 #6077] || v.db.connect: Add JSON support || July 19, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6091 #6091] || g.findfile: Add JSON support || July 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6098 #6098] || r3.info: Add test file || July 22, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6103 #6103] || r3.info: Add JSON support || July 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6109 #6109] || v.what.rast: Add test file || July 24, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6132 #6132] || v.category: Use CSV format instead of shell format || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6133 #6133] || r.stats: add CSV support || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6134 #6134] || r.volume: add csv column headers || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6140 #6140] || v.what.rast: Add JSON support || July 29, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6145 #6145] || r.profile: Add CSV support || July 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6150 #6150] || r.distance: Update existing test cases || August 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6204 #6204] || r.distance: Add JSON and CSV support || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6205 #6205] || v.class: Add more test cases and fix out-of-bounds bug || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6210 #6210] || v.class: Add JSON and CSV support || August 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6252 #6252] || v.what: Update JSON output format || August 23, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Additional Links ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Ttile&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| OSGeo Wiki Page&lt;br /&gt;
| [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C Add JSON output to different tools in C for GRASS]&lt;br /&gt;
|-&lt;br /&gt;
| Github Fork&lt;br /&gt;
| [https://github.com/NishantBansal2003/grass GitHub Fork]&lt;br /&gt;
|-&lt;br /&gt;
| GSoC Page&lt;br /&gt;
| [https://summerofcode.withgoogle.com/programs/2025/projects/GPVGd3DH Link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples &amp;amp; Images ==&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; JSON output in Python ===&lt;br /&gt;
The following example demonstrates how the JSON output of &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; can be directly loaded into a pandas DataFrame and used for plotting with matplotlib.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
# Run r.profile command&lt;br /&gt;
elevation = gs.read_command(&lt;br /&gt;
    &amp;quot;r.profile&amp;quot;,&lt;br /&gt;
    input=&amp;quot;elevation&amp;quot;,&lt;br /&gt;
    coordinates=&amp;quot;641712,226095,641546,224138,641546,222048,641049,221186&amp;quot;,&lt;br /&gt;
    format=&amp;quot;json&amp;quot;,&lt;br /&gt;
    flags=&amp;quot;gc&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Load the JSON data into a dataframe&lt;br /&gt;
df = pd.read_json(elevation)&lt;br /&gt;
print(df)&lt;br /&gt;
&lt;br /&gt;
# Create the scatter plot&lt;br /&gt;
plt.figure(figsize=(10, 6))&lt;br /&gt;
plt.scatter(df[&amp;quot;distance&amp;quot;], df[&amp;quot;value&amp;quot;], c=df[&amp;quot;color&amp;quot;], marker=&amp;quot;o&amp;quot;)&lt;br /&gt;
plt.title(&amp;quot;Profile of Distance vs. Elevation with Color Coding&amp;quot;)&lt;br /&gt;
plt.xlabel(&amp;quot;Distance (meters)&amp;quot;)&lt;br /&gt;
plt.ylabel(&amp;quot;Elevation&amp;quot;)&lt;br /&gt;
plt.grid(True)&lt;br /&gt;
plt.show()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample DataFrame Output (first 10 rows) ====  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
         easting       northing   distance      value    color&lt;br /&gt;
0  641712.000000  226095.000000   0.000000  84.661507  #71FF00&lt;br /&gt;
1  641711.154826  226085.036106   9.999675  84.511765  #6FFF00&lt;br /&gt;
2  641710.309651  226075.072213  19.999349  84.241806  #6BFF00&lt;br /&gt;
3  641709.464477  226065.108319  29.999024  84.304214  #6CFF00&lt;br /&gt;
4  641708.619302  226055.144426  39.998699  84.174400  #6AFF00&lt;br /&gt;
5  641707.774128  226045.180532  49.998374  84.112534  #6AFF00&lt;br /&gt;
6  641706.928954  226035.216639  59.998048  84.011208  #68FF00&lt;br /&gt;
7  641706.083779  226025.252745  69.997723  83.834084  #66FF00&lt;br /&gt;
8  641705.238605  226015.288851  79.997398  83.870193  #67FF00&lt;br /&gt;
9  641704.393430  226005.324958  89.997073  84.194908  #6BFF00&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Visualization ====  &lt;br /&gt;
&lt;br /&gt;
Matplotlib scatter plot generated from the &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt; JSON output: &lt;br /&gt;
&lt;br /&gt;
[[File:R profile plot.png]]&lt;br /&gt;
&lt;br /&gt;
{{GSoC}}&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=File:R_profile_plot.png&amp;diff=28664</id>
		<title>File:R profile plot.png</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=File:R_profile_plot.png&amp;diff=28664"/>
		<updated>2025-08-24T06:36:46Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;r. profile plot&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28663</id>
		<title>GRASS GSoC 2025 Add JSON output to different tools in C</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28663"/>
		<updated>2025-08-24T06:22:00Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: /* Timeline */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Nishant Bansal&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo - Open Source Geospatial Foundation]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/NishantBansal2003/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''GSoC proposal''' || [https://docs.google.com/document/d/1ZPQ9RXU7b_RUDmBmAMeK7ZjFAV1WC7Urd1Zlz678jyw/edit?tab=t.0#heading=h.z6ne0og04bp5 View Proposal]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Abstract =&lt;br /&gt;
Currently, most GRASS tools produce data in plain text by default. This means that users who want to process the output in Python need to create custom parsing code. To make this easier, several modules could be improved by oﬀering JSON as an alternative output format. Recently, the Parson library was added to the GRASS codebase to support JSON output in addition to plain text. Building on the advancements made during the last GSoC, my project aims to expand JSON output capabilities to more tools using the Parson library. I will also work on making the JSON structure introduced in the previous GSoC more useful and consistent. Additionally, I plan to add support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
&lt;br /&gt;
# Working with mentors to finalize the structure of the JSON output.&lt;br /&gt;
# Adding an option to choose the output format (plain text or JSON) for each updated tool.&lt;br /&gt;
# Make the JSON structure introduced during the last GSoC more useful and consistent across tools.&lt;br /&gt;
# Developing Python test cases to ensure that the JSON output works correctly and to avoid future issues.&lt;br /&gt;
# Providing basic documentation and example JSON outputs for each modified tool.&lt;br /&gt;
# Adding support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
# Develop simple examples demonstrating how to use JSON output in a data science workflow, such as reading JSON data into pandas or python.&lt;br /&gt;
&lt;br /&gt;
= Timeline =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Period !! Timeline  !! Tasks   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period &lt;br /&gt;
||&lt;br /&gt;
May 8 - June 1  &lt;br /&gt;
|| &lt;br /&gt;
# Reviewed the work done during the last GSoC to stabilize the JSON output.&lt;br /&gt;
# Discussed the priority tools for adding JSON support.&lt;br /&gt;
# Read GRASS documentation to add Python and JSON examples to the documentation.&lt;br /&gt;
|| &lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;13&amp;quot; | Official Coding Period &lt;br /&gt;
|-&lt;br /&gt;
| '''Week 1''' (June 2 - June 8) || &lt;br /&gt;
# Add JSON support for g.mapset [https://github.com/OSGeo/grass/pull/5810 #5810]&lt;br /&gt;
# Fix uninitialized zone_value in r.univar [https://github.com/OSGeo/grass/pull/5821 #5821]&lt;br /&gt;
# Add JSON support for r.what.color [https://github.com/OSGeo/grass/pull/5822 #5822]&lt;br /&gt;
# Update test file in r.info [https://github.com/OSGeo/grass/pull/5842 #5842]&lt;br /&gt;
# Improve interface for r.info [https://github.com/OSGeo/grass/pull/5859 #5859]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 2''' (June 9 - June 15) ||&lt;br /&gt;
# Add JSON support for g.version [https://github.com/OSGeo/grass/pull/5863 #5863]&lt;br /&gt;
# Add JSON support for i.group [https://github.com/OSGeo/grass/pull/5870 #5870]&lt;br /&gt;
# Add test file in r.stats [https://github.com/OSGeo/grass/pull/5879 #5879]&lt;br /&gt;
# Add tests for JSON output in r.stats [https://github.com/OSGeo/grass/pull/5892 #5892]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 3''' (June 16 - June 22) ||&lt;br /&gt;
# Update the JSON output schema of v.distance [https://github.com/OSGeo/grass/pull/5898 #5898]&lt;br /&gt;
# Fix uninitialized window variable in r.stats [https://github.com/OSGeo/grass/pull/5900 #5900]&lt;br /&gt;
# Add test file in g.list [https://github.com/OSGeo/grass/pull/5906 #5906]&lt;br /&gt;
# Add JSON support for g.list [https://github.com/OSGeo/grass/pull/5921 #5921]&lt;br /&gt;
# Update the JSON output schema of g.region [https://github.com/OSGeo/grass/pull/5929 #5929]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 4''' (June 23 - June 29) ||&lt;br /&gt;
# Update the JSON output schema of v.to.db [https://github.com/OSGeo/grass/pull/5946 #5946]&lt;br /&gt;
# Update the JSON output schema of r.profile [https://github.com/OSGeo/grass/pull/5962 #5962]&lt;br /&gt;
# Add SHELL and CSV output support for r.univar [https://github.com/OSGeo/grass/pull/5966 #5966]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 5''' (June 30 - July 6) ||&lt;br /&gt;
# Add test file in r.regression.line [https://github.com/OSGeo/grass/pull/5990 #5990]&lt;br /&gt;
# Add JSON support for r.regression.line [https://github.com/OSGeo/grass/pull/5993 #5993]&lt;br /&gt;
# Add test file in r.stats.quantile [https://github.com/OSGeo/grass/pull/6002 #6002]&lt;br /&gt;
# Add JSON support for r.stats.quantile [https://github.com/OSGeo/grass/pull/6007 #6007]&lt;br /&gt;
# Add test file in r.volume [https://github.com/OSGeo/grass/pull/6027 #6027]&lt;br /&gt;
# Add JSON support for r.volume [https://github.com/OSGeo/grass/pull/6036 #6036]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 6''' (July 7 - July 13) ||&lt;br /&gt;
# Add JSON support for db.columns [https://github.com/OSGeo/grass/pull/6042 #6042]&lt;br /&gt;
# Add test file in m.measure [https://github.com/OSGeo/grass/pull/6051 #6051]&lt;br /&gt;
# Add test file in db.connect [https://github.com/OSGeo/grass/pull/6052 #6052]&lt;br /&gt;
# Add JSON support for m.measure [https://github.com/OSGeo/grass/pull/6053 #6053]&lt;br /&gt;
# Add JSON support for db.connect [https://github.com/OSGeo/grass/pull/6059 #6059]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | '''Week 7''' (July 14 - July 20) ||&lt;br /&gt;
# Add test file in r.regression.multi [https://github.com/OSGeo/grass/pull/6066 #6066]&lt;br /&gt;
# Add test file in v.db.connect [https://github.com/OSGeo/grass/pull/6067 #6067]&lt;br /&gt;
# Add JSON support for r.regression.multi [https://github.com/OSGeo/grass/pull/6075 #6075]&lt;br /&gt;
# Add JSON support for v.db.connect [https://github.com/OSGeo/grass/pull/6077 #6077]&lt;br /&gt;
# Submit MidTerm evaluation.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 8''' (July 21 - July 27) ||&lt;br /&gt;
# Add JSON support for g.findfile [https://github.com/OSGeo/grass/pull/6091 #6091]&lt;br /&gt;
# Add test file in r3.info [https://github.com/OSGeo/grass/pull/6098 #6098]&lt;br /&gt;
# Add JSON support for r3.info [https://github.com/OSGeo/grass/pull/6103 #6103]&lt;br /&gt;
# Add test file in v.what.rast [https://github.com/OSGeo/grass/pull/6109 #6109]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 9''' (July 28 - August 3) ||&lt;br /&gt;
# Update format to CSV instead of shell in v.category [https://github.com/OSGeo/grass/pull/6132 #6132]&lt;br /&gt;
# Add CSV output support to r.stats [https://github.com/OSGeo/grass/pull/6133 #6133]&lt;br /&gt;
# Add CSV headers to r.volume [https://github.com/OSGeo/grass/pull/6134 #6134]&lt;br /&gt;
# Add JSON support for v.what.rast [https://github.com/OSGeo/grass/pull/6140 #6140]&lt;br /&gt;
# Add CSV output support to r.profile [https://github.com/OSGeo/grass/pull/6145 #6145]&lt;br /&gt;
# Update test cases in r.distance [https://github.com/OSGeo/grass/pull/6150 #6150]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 10''' (August 4 - August 10) ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 11''' (August 11 - August 17) ||&lt;br /&gt;
# Add JSON and CSV support for r.distance [https://github.com/OSGeo/grass/pull/6204 #6204]&lt;br /&gt;
# Add more test cases in v.class [https://github.com/OSGeo/grass/pull/6205 #6205]&lt;br /&gt;
# Add JSON and CSV support for v.class [https://github.com/OSGeo/grass/pull/6210 #6210]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 12''' (August 18 - August 24) ||&lt;br /&gt;
# Update JSON output format for v.what [https://github.com/OSGeo/grass/pull/6252 #6252]&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Evaluation Period &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | August 25 - September 1 ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
# Submit code, final evaluation and write the final GSoC report.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Reports =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* Introduced myself on the [https://discourse.osgeo.org/t/gsoc-2025-introduction-nishant-bansal/147005 OSGeo Discourse mailing list].&lt;br /&gt;
* Created both my [https://wiki.osgeo.org/wiki/User:Nishantbansal2003 personal Wiki page] and the [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C project Wiki page], adding all necessary project-related information.&lt;br /&gt;
* Read GRASS documentation to support the addition of Python and JSON examples.&lt;br /&gt;
* Worked on the following pull requests:&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5688 #5688]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5773 #5773]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5775 #5775]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5784 #5784]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5785 #5785]&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to the g.mapset and r.what.color modules.&lt;br /&gt;
* If time permits, I will begin improving the r.info interface: [https://github.com/OSGeo/grass/issues/5793 Issue #5793]&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
'''Project Discussions and Meetings'''&lt;br /&gt;
* '''14 May 2025''': Introductory meeting discussing JSON support and overall project milestones.&lt;br /&gt;
* '''21 May 2025''': Introduction with fellow developers. Discussed priority tools, adding Python/Pandas examples, and approaches for finalizing the JSON schema for each module.&lt;br /&gt;
&lt;br /&gt;
== Week-1 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.mapset''': Added JSON output support, now you can use -p and -l flags to get JSON-formatted results.&lt;br /&gt;
* '''r.univar''': Fixed a bug causing an uninitialized zone_value.&lt;br /&gt;
* '''r.what.color''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5822 #5822])&lt;br /&gt;
* '''r.info (regression tests)''': To maintain backward compatibility while updating its interface, I added strong regression tests.&lt;br /&gt;
* '''r.info (interface improvements)''': Began improving the module’s interface. (See PR [https://github.com/OSGeo/grass/pull/5859 #5859])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.version (see issue [https://github.com/OSGeo/grass/issues/5816 #5816]).&lt;br /&gt;
* Add JSON output support to i.group (see issue [https://github.com/OSGeo/grass/issues/5815 #5815]).&lt;br /&gt;
* If time permits, write tests for r.stats (see issue [https://github.com/OSGeo/grass/issues/5814 #5814]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-2 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.version''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5863 #5863])&lt;br /&gt;
* '''i.group''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5870 #5870])&lt;br /&gt;
* '''r.stats (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats''': Added tests for JSON output; this uncovered a bug, which was fixed alongside.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.distance (see issue [https://github.com/OSGeo/grass/issues/5846 #5846]).&lt;br /&gt;
* Add JSON output support to g.list (see issue [https://github.com/OSGeo/grass/issues/5848 #5848]).&lt;br /&gt;
* If time permits, fix the JSON output format of g.region (see issue [https://github.com/OSGeo/grass/issues/5828 #5828]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-3 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.distance''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5898 #5898])&lt;br /&gt;
* '''r.stats''': Fixed a bug causing an uninitialized &amp;lt;code&amp;gt;window&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
* '''g.list (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''g.list''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5921 #5921])&lt;br /&gt;
* '''g.region''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5929 #5929])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.to.db (see issue [https://github.com/OSGeo/grass/pull/5711 #5711]).&lt;br /&gt;
* Update JSON output format and documentation of r.profile (see issue [https://github.com/OSGeo/grass/pull/5834 #5834]).&lt;br /&gt;
* If time permits, add shell and csv output formats to r.univar (see issue [https://github.com/OSGeo/grass/pull/5824 #5824]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-4 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.to.db''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5946 #5946])&lt;br /&gt;
* '''r.profile''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5962 #5962])&lt;br /&gt;
* '''r.univar''': Implemented SHELL and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/5966 #5966])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.regression.line (see issue [https://github.com/OSGeo/grass/pull/5950 #5950]).&lt;br /&gt;
* Add JSON output support to r.stats.quantile (see issue [https://github.com/OSGeo/grass/pull/5951 #5951]).&lt;br /&gt;
* Add JSON output support to r.volume (see issue [https://github.com/OSGeo/grass/pull/5949 #5949]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-5 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.line (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.line''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5993 #5993])&lt;br /&gt;
* '''r.stats.quantile (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats.quantile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6007 #6007])&lt;br /&gt;
* '''r.volume (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.volume''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6036 #6036])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to m.measure (see issue [https://github.com/OSGeo/grass/pull/6006 #6006]).&lt;br /&gt;
* Add JSON output support to db.columns (see issue [https://github.com/OSGeo/grass/pull/6008 #6008]).&lt;br /&gt;
* Add JSON output support to db.connect (see issue [https://github.com/OSGeo/grass/pull/6009 #6009]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-6 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''db.columns''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6042 #6042])&lt;br /&gt;
* '''m.measure (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''m.measure''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6053 #6053])&lt;br /&gt;
* '''db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6059 #6059])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to v.db.connect (see issue [https://github.com/OSGeo/grass/pull/6014 #6014]).&lt;br /&gt;
* Add JSON output support to r.regression.multi (see issue [https://github.com/OSGeo/grass/pull/6010 #6010]).&lt;br /&gt;
* If time permits, add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* If time permits, add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-7 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.multi (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''v.db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.multi''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6075 #6075])&lt;br /&gt;
* '''v.db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6077 #6077])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* Add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
* If time permits, add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-8 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.findfile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6091 #6091])&lt;br /&gt;
* '''r3.info (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a flag-handling bug.&lt;br /&gt;
* '''r3.info''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6103 #6103])&lt;br /&gt;
* '''v.what.rast (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a sorting bug.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
* Update format to CSV instead of shell in v.category (see issue [https://github.com/OSGeo/grass/pull/6025 #6025]).&lt;br /&gt;
* Add CSV output support to r.stats (see issue [https://github.com/OSGeo/grass/issues/5835 #5835]).&lt;br /&gt;
* If time permits, add CSV output support to r.profile (see issue [https://github.com/OSGeo/grass/issues/5958 #5958]).&lt;br /&gt;
* If time permits, add CSV headers to r.volume (see issue [https://github.com/OSGeo/grass/issues/6049 #6049]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I don’t have any blockers this week. However, I’ll be a little busy with some personal work from August 3 to August 10, so I’ll try to complete next week’s tasks this week itself.&lt;br /&gt;
&lt;br /&gt;
== Week-9 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.category''': Updated format to CSV instead of shell. (See PR [https://github.com/OSGeo/grass/pull/6132 #6132])&lt;br /&gt;
* '''r.stats''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6133 #6133])&lt;br /&gt;
* '''r.volume''': Implemented CSV column headers support. (See PR [https://github.com/OSGeo/grass/pull/6134 #6134])&lt;br /&gt;
* '''v.what.rast''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6140 #6140])&lt;br /&gt;
* '''r.profile''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6145 #6145])&lt;br /&gt;
* '''r.distance (regression tests)''': Updated regression tests to ensure backward compatibility with new JSON support. (See PR [https://github.com/OSGeo/grass/pull/6150 #6150])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* I’ll be a bit busy with some personal work from August 3 to 10, so I completed next week’s tasks last week itself. I’ve already informed my mentors about my limited availability.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* Yes, I’ll be a bit busy with some personal work from August 3 to 10.&lt;br /&gt;
&lt;br /&gt;
== Week-10 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* This week I was busy with some personal work, so I did not complete any additional tasks. However, I had already finished this week’s tasks last week. This week, I mostly focused on handling reviews for those PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.distance (see issue [https://github.com/OSGeo/grass/issues/6135 #6135]).&lt;br /&gt;
* Add JSON output support to v.class (see issue [https://github.com/OSGeo/grass/issues/6136 #6136]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-11 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.distance''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6204 #6204])&lt;br /&gt;
* '''v.class''': Updated regression tests to ensure backward compatibility with new JSON support and fixed a out-of-bounds bug. (See PR [https://github.com/OSGeo/grass/pull/6205 #6205])&lt;br /&gt;
* '''v.class''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6210 #6210])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Discuss next week’s tasks with my mentors, if no issues are assigned, I’ll identify tools that currently lack JSON support and evaluate which ones are feasible to add it to.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-12 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.what''': Update JSON output format. (See PR [https://github.com/OSGeo/grass/pull/6252 #6252])&lt;br /&gt;
* Addressed review comments on my open PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
= Final Report =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Title''' || Add JSON output to different tools in C for GRASS&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo (Open Source Geospatial Foundation)]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''Program''' || Google Summer of Code 2025&lt;br /&gt;
|-&lt;br /&gt;
| '''Contributions''' || [https://github.com/OSGeo/grass/pulls?q=is%3Apr+author%3ANishantBansal2003+ Pull Requests]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
During my GSoC project, I addressed the challenge that most GRASS tools produced only plain text output, forcing users to write custom parsing code for Python-based workflows. The task was to make these tools more data-science friendly by adding structured output formats. To achieve this, I extended the use of the Parson library to implement consistent JSON output across multiple modules, refined the JSON structure introduced in the previous GSoC, and added optional support for SHELL and CSV outputs where appropriate. I developed comprehensive Python test cases, ensured backward compatibility, and provided documentation with practical examples such as loading JSON into pandas. As a result, GRASS users can now directly consume structured outputs in modern workflows, reducing parsing overhead, improving interoperability, and paving the way for broader adoption of GRASS in data science contexts.&lt;br /&gt;
&lt;br /&gt;
== The state of integration BEFORE the start of GSoC ==&lt;br /&gt;
Before the start of GSoC, the integration of GRASS with data science workflows was limited due to several challenges. The JSON outputs introduced in the previous GSoC contained deeply nested hierarchies, making them difficult to use directly with libraries such as '''pandas''' or in broader data science pipelines. While some tools already supported JSON (e.g., &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;), many important and highly demanded modules lacked JSON support, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt; and many more. This lack of consistency limited the seamless adoption of GRASS in analytics and machine learning contexts. Moreover, there was no clear '''documentation of the JSON schema''' or guidance on how to parse and utilize these outputs effectively in '''python or pandas''', which made it difficult for users to understand the use cases and integrate GRASS outputs into modern data science workflows.&lt;br /&gt;
&lt;br /&gt;
== The state of integration AFTER GSoC ==&lt;br /&gt;
&lt;br /&gt;
After GSoC, the integration state of JSON and alternative output formats in GRASS has significantly improved. I refactored the JSON structures for tools such as &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;, and others, removing unnecessary nesting introduced during the previous GSoC. This makes their outputs much easier to consume directly in &amp;lt;b&amp;gt;Python&amp;lt;/b&amp;gt; or with &amp;lt;b&amp;gt;pandas&amp;lt;/b&amp;gt;. In addition, JSON support has been extended to many essential and frequently used modules, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;, and many more. I also added detailed documentation of the JSON schema and provided examples showing how to parse and use these outputs effectively with Python and pandas. Together, these improvements make the adoption of GRASS in modern &amp;lt;b&amp;gt;data science workflows&amp;lt;/b&amp;gt; far more seamless and accessible.&lt;br /&gt;
&lt;br /&gt;
=== Enhancements made per tool ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;: Simplified JSON structure for univariate statistics, removed unnecessary hierarchy, and added new output format options (CSV, shell).&lt;br /&gt;
* &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;: Added JSON support for querying raster map colors, with a Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;: Added JSON support for reporting the current mapset, with a Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;: Updated JSON structure for raster map metadata, removing hierarchy for easier parsing. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;: Simplified JSON output for geographic region boundaries, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;: Added JSON support for GRASS version information, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;: Added JSON support for listing imagery groups, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;: Added JSON and CSV support for raster area statistics, with Python and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;: Refined JSON schema for nearest element queries, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;: Added JSON support for listing GRASS database files, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;: Updated JSON schema for printing vector attribute values, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;: Simplified JSON output, added CSV support, and included a matplotlib example for profile visualization.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;: Updated JSON schema for linear regression between rasters, with Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;: Updated JSON schema for category quantiles, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;: Added JSON support for raster volume calculations, fixed missing headers in CSV output, and provided pandas examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.columns&amp;lt;/code&amp;gt;: Added JSON output for listing database table columns, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;: Added JSON output for measuring lengths and areas, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.connect&amp;lt;/code&amp;gt;: Added JSON output for DB connection info, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.multi&amp;lt;/code&amp;gt;: Added JSON output for multiple regression between rasters, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.db.connect&amp;lt;/code&amp;gt;: Added JSON output for vector map attribute connections, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.findfile&amp;lt;/code&amp;gt;: Added JSON output for GRASS database file search, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;: Added JSON output for 3D raster map info, with Python example. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;: Added JSON output for extracting raster values at vector points, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt;: Added JSON and CSV support for locating closest points between raster objects, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;: Added JSON and CSV support for attribute data, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;: Migrated from manually written JSON to Parson-based JSON output, simplified schema, and provided Python parsing examples.&lt;br /&gt;
&lt;br /&gt;
All these changes were accompanied by regression tests to ensure that new JSON/CSV/SHELL/PLAIN output options do not break existing functionality. Additionally, I introduced comprehensive Python test cases for these outputs, making the enhancements reliable and future-proof. During this work, I also fixed several bugs in modules such as &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;, strengthening the stability of GRASS as a whole.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
To sum up, I’m glad to have met the three core objectives of my project with the constant support of my mentors:&lt;br /&gt;
&lt;br /&gt;
* Brought JSON output to several important and long-requested modules, added regression tests, and ensured reliable future test coverage.&lt;br /&gt;
* Enhanced the JSON schema introduced in last year’s GSoC by reducing unnecessary hierarchy, making it more consistent across tools, and providing Python/Pandas examples for practical use.&lt;br /&gt;
* Expanded &amp;lt;b&amp;gt;CSV&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;SHELL&amp;lt;/b&amp;gt; output formats to additional tools where they could bring value.&lt;br /&gt;
&lt;br /&gt;
This journey has been both rewarding and educational, and I’m grateful for the opportunity to contribute to GRASS through GSoC 2025. I especially want to thank &amp;lt;b&amp;gt;Anna Petrasova&amp;lt;/b&amp;gt; and the GRASS Development Team for their guidance and support. I’m excited to keep building on this work and further extend JSON and other features in the future.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
There is significant scope to extend structured output support across GRASS tools. In particular, future efforts should focus on:&lt;br /&gt;
* Expanding JSON output to additional modules, with details tracked here: [https://github.com/orgs/OSGeo/projects/10 GRASS JSON Outputs Project].&lt;br /&gt;
* Refining and standardizing the JSON schema to better support complex workflows and integrations.&lt;br /&gt;
* Exploring and implementing other output formats (e.g., SHELL, CSV, PLAIN) where they can improve usability and automation.&lt;br /&gt;
I also plan to continue contributing to GRASS by extending JSON support to more modules and engaging in community discussions around schema design and format integration.&lt;br /&gt;
&lt;br /&gt;
== Log of Pull Requests ==&lt;br /&gt;
Below is a list of pull requests submitted to the GRASS repository during GSoC 2025:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pull Request !! Description  !! Date   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5688 #5688] || r.univar: Fix JSON structure || May 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5773 #5773] || r.what.color: Add test file || May 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5775 #5775] || g.mapset: Add test file || May 26, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5784 #5784] || r.info: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;Closed&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5785 #5785] || g.region: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5810 #5810] || g.mapset: Add JSON support || June 2, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5821 #5821] || r.univar: Fix uninitialized zone_value || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5822 #5822] || r.what.color: Add JSON support || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5842 #5842] || r.info: Update test file || June 5, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5859 #5859] || r.info: Improve interface || June 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5863 #5863] || g.version: Add JSON support || June 9, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5870 #5870] || i.group: Add JSON support || June 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5879 #5879] || r.stats: Add test file || June 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5892 #5892] || r.stats: Add tests for JSON output || June 14, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5898 #5898] || v.distance: Update JSON format || June 16, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5900 #5900] || r.stats: fix uninitialised window value || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5906 #5906] || g.list: Add test file || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5921 #5921] || g.list: Add JSON support || June 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5929 #5929] || g.region: Update JSON format || June 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5946 #5946] || v.to.db: Update JSON format || June 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5962 #5962] || r.profile: Update JSON format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5966 #5966] || r.univar: Add shell and CSV format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5990 #5990] || r.regression.line: Add test file || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5993 #5993] || r.regression.line: Add JSON support || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6002 #6002] || r.stats.quantile: Add test file || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6007 #6007] || r.stats.quantile: Add JSON support || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6027 #6027] || r.volume: Add test file || July 4, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6036 #6036] || r.volume: Add JSON support || July 6, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6042 #6042] || db.columns: Add JSON support || July 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6051 #6051] || m.measure: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6052 #6052] || db.connect: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6053 #6053] || m.measure: Add JSON support || July 11, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6059 #6059] || db.connect: Add JSON support || July 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6066 #6066] || r.regression.multi: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6067 #6067] || v.db.connect: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6075 #6075] || r.regression.multi: Add JSON support || July 18, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6077 #6077] || v.db.connect: Add JSON support || July 19, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6091 #6091] || g.findfile: Add JSON support || July 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6098 #6098] || r3.info: Add test file || July 22, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6103 #6103] || r3.info: Add JSON support || July 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6109 #6109] || v.what.rast: Add test file || July 24, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6132 #6132] || v.category: Use CSV format instead of shell format || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6133 #6133] || r.stats: add CSV support || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6134 #6134] || r.volume: add csv column headers || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6140 #6140] || v.what.rast: Add JSON support || July 29, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6145 #6145] || r.profile: Add CSV support || July 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6150 #6150] || r.distance: Update existing test cases || August 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6204 #6204] || r.distance: Add JSON and CSV support || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6205 #6205] || v.class: Add more test cases and fix out-of-bounds bug || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6210 #6210] || v.class: Add JSON and CSV support || August 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6252 #6252] || v.what: Update JSON output format || August 23, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Additional Links ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Ttile&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| OSGeo Wiki Page&lt;br /&gt;
| [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C Add JSON output to different tools in C for GRASS]&lt;br /&gt;
|-&lt;br /&gt;
| Github Fork&lt;br /&gt;
| [https://github.com/NishantBansal2003/grass GitHub Fork]&lt;br /&gt;
|-&lt;br /&gt;
| GSoC Page&lt;br /&gt;
| [https://summerofcode.withgoogle.com/programs/2025/projects/GPVGd3DH Link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples &amp;amp; Images ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{GSoC}}&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28662</id>
		<title>GRASS GSoC 2025 Add JSON output to different tools in C</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28662"/>
		<updated>2025-08-24T06:16:13Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: /* Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Nishant Bansal&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo - Open Source Geospatial Foundation]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/NishantBansal2003/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''GSoC proposal''' || [https://docs.google.com/document/d/1ZPQ9RXU7b_RUDmBmAMeK7ZjFAV1WC7Urd1Zlz678jyw/edit?tab=t.0#heading=h.z6ne0og04bp5 View Proposal]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Abstract =&lt;br /&gt;
Currently, most GRASS tools produce data in plain text by default. This means that users who want to process the output in Python need to create custom parsing code. To make this easier, several modules could be improved by oﬀering JSON as an alternative output format. Recently, the Parson library was added to the GRASS codebase to support JSON output in addition to plain text. Building on the advancements made during the last GSoC, my project aims to expand JSON output capabilities to more tools using the Parson library. I will also work on making the JSON structure introduced in the previous GSoC more useful and consistent. Additionally, I plan to add support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
&lt;br /&gt;
# Working with mentors to finalize the structure of the JSON output.&lt;br /&gt;
# Adding an option to choose the output format (plain text or JSON) for each updated tool.&lt;br /&gt;
# Make the JSON structure introduced during the last GSoC more useful and consistent across tools.&lt;br /&gt;
# Developing Python test cases to ensure that the JSON output works correctly and to avoid future issues.&lt;br /&gt;
# Providing basic documentation and example JSON outputs for each modified tool.&lt;br /&gt;
# Adding support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
# Develop simple examples demonstrating how to use JSON output in a data science workflow, such as reading JSON data into pandas or python.&lt;br /&gt;
&lt;br /&gt;
= Timeline =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Period !! Timeline  !! Tasks   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period &lt;br /&gt;
||&lt;br /&gt;
May 8 - June 1  &lt;br /&gt;
|| &lt;br /&gt;
# Reviewed the work done during the last GSoC to stabilize the JSON output.&lt;br /&gt;
# Discussed the priority tools for adding JSON support.&lt;br /&gt;
# Read GRASS documentation to add Python and JSON examples to the documentation.&lt;br /&gt;
|| &lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;13&amp;quot; | Official Coding Period &lt;br /&gt;
|-&lt;br /&gt;
| '''Week 1''' (June 2 - June 8) || &lt;br /&gt;
# Add JSON support for g.mapset [https://github.com/OSGeo/grass/pull/5810 #5810]&lt;br /&gt;
# Fix uninitialized zone_value in r.univar [https://github.com/OSGeo/grass/pull/5821 #5821]&lt;br /&gt;
# Add JSON support for r.what.color [https://github.com/OSGeo/grass/pull/5822 #5822]&lt;br /&gt;
# Update test file in r.info [https://github.com/OSGeo/grass/pull/5842 #5842]&lt;br /&gt;
# Improve interface for r.info [https://github.com/OSGeo/grass/pull/5859 #5859]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 2''' (June 9 - June 15) ||&lt;br /&gt;
# Add JSON support for g.version [https://github.com/OSGeo/grass/pull/5863 #5863]&lt;br /&gt;
# Add JSON support for i.group [https://github.com/OSGeo/grass/pull/5870 #5870]&lt;br /&gt;
# Add test file in r.stats [https://github.com/OSGeo/grass/pull/5879 #5879]&lt;br /&gt;
# Add tests for JSON output in r.stats [https://github.com/OSGeo/grass/pull/5892 #5892]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 3''' (June 16 - June 22) ||&lt;br /&gt;
# Update the JSON output schema of v.distance [https://github.com/OSGeo/grass/pull/5898 #5898]&lt;br /&gt;
# Fix uninitialized window variable in r.stats [https://github.com/OSGeo/grass/pull/5900 #5900]&lt;br /&gt;
# Add test file in g.list [https://github.com/OSGeo/grass/pull/5906 #5906]&lt;br /&gt;
# Add JSON support for g.list [https://github.com/OSGeo/grass/pull/5921 #5921]&lt;br /&gt;
# Update the JSON output schema of g.region [https://github.com/OSGeo/grass/pull/5929 #5929]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 4''' (June 23 - June 29) ||&lt;br /&gt;
# Update the JSON output schema of v.to.db [https://github.com/OSGeo/grass/pull/5946 #5946]&lt;br /&gt;
# Update the JSON output schema of r.profile [https://github.com/OSGeo/grass/pull/5962 #5962]&lt;br /&gt;
# Add SHELL and CSV output support for r.univar [https://github.com/OSGeo/grass/pull/5966 #5966]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 5''' (June 30 - July 6) ||&lt;br /&gt;
# Add test file in r.regression.line [https://github.com/OSGeo/grass/pull/5990 #5990]&lt;br /&gt;
# Add JSON support for r.regression.line [https://github.com/OSGeo/grass/pull/5993 #5993]&lt;br /&gt;
# Add test file in r.stats.quantile [https://github.com/OSGeo/grass/pull/6002 #6002]&lt;br /&gt;
# Add JSON support for r.stats.quantile [https://github.com/OSGeo/grass/pull/6007 #6007]&lt;br /&gt;
# Add test file in r.volume [https://github.com/OSGeo/grass/pull/6027 #6027]&lt;br /&gt;
# Add JSON support for r.volume [https://github.com/OSGeo/grass/pull/6036 #6036]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 6''' (July 7 - July 13) ||&lt;br /&gt;
# Add JSON support for db.columns [https://github.com/OSGeo/grass/pull/6042 #6042]&lt;br /&gt;
# Add test file in m.measure [https://github.com/OSGeo/grass/pull/6051 #6051]&lt;br /&gt;
# Add test file in db.connect [https://github.com/OSGeo/grass/pull/6052 #6052]&lt;br /&gt;
# Add JSON support for m.measure [https://github.com/OSGeo/grass/pull/6053 #6053]&lt;br /&gt;
# Add JSON support for db.connect [https://github.com/OSGeo/grass/pull/6059 #6059]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 7''' (July 14 - July 20) ||&lt;br /&gt;
# Add test file in r.regression.multi [https://github.com/OSGeo/grass/pull/6066 #6066]&lt;br /&gt;
# Add test file in v.db.connect [https://github.com/OSGeo/grass/pull/6067 #6067]&lt;br /&gt;
# Add JSON support for r.regression.multi [https://github.com/OSGeo/grass/pull/6075 #6075]&lt;br /&gt;
# Add JSON support for v.db.connect [https://github.com/OSGeo/grass/pull/6077 #6077]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 8''' (July 21 - July 27) ||&lt;br /&gt;
# Add JSON support for g.findfile [https://github.com/OSGeo/grass/pull/6091 #6091]&lt;br /&gt;
# Add test file in r3.info [https://github.com/OSGeo/grass/pull/6098 #6098]&lt;br /&gt;
# Add JSON support for r3.info [https://github.com/OSGeo/grass/pull/6103 #6103]&lt;br /&gt;
# Add test file in v.what.rast [https://github.com/OSGeo/grass/pull/6109 #6109]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 9''' (July 28 - August 3) ||&lt;br /&gt;
# Update format to CSV instead of shell in v.category [https://github.com/OSGeo/grass/pull/6132 #6132]&lt;br /&gt;
# Add CSV output support to r.stats [https://github.com/OSGeo/grass/pull/6133 #6133]&lt;br /&gt;
# Add CSV headers to r.volume [https://github.com/OSGeo/grass/pull/6134 #6134]&lt;br /&gt;
# Add JSON support for v.what.rast [https://github.com/OSGeo/grass/pull/6140 #6140]&lt;br /&gt;
# Add CSV output support to r.profile [https://github.com/OSGeo/grass/pull/6145 #6145]&lt;br /&gt;
# Update test cases in r.distance [https://github.com/OSGeo/grass/pull/6150 #6150]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 10''' (August 4 - August 10) ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 11''' (August 11 - August 17) ||&lt;br /&gt;
# Add JSON and CSV support for r.distance [https://github.com/OSGeo/grass/pull/6204 #6204]&lt;br /&gt;
# Add more test cases in v.class [https://github.com/OSGeo/grass/pull/6205 #6205]&lt;br /&gt;
# Add JSON and CSV support for v.class [https://github.com/OSGeo/grass/pull/6210 #6210]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 12''' (August 18 - August 24) ||&lt;br /&gt;
# Update JSON output format for v.what [https://github.com/OSGeo/grass/pull/6252 #6252]&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Evaluation Period &lt;br /&gt;
|-&lt;br /&gt;
| August 25 - September 1 ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
# Submit code, final evaluation and write the final GSoC report.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Reports =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* Introduced myself on the [https://discourse.osgeo.org/t/gsoc-2025-introduction-nishant-bansal/147005 OSGeo Discourse mailing list].&lt;br /&gt;
* Created both my [https://wiki.osgeo.org/wiki/User:Nishantbansal2003 personal Wiki page] and the [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C project Wiki page], adding all necessary project-related information.&lt;br /&gt;
* Read GRASS documentation to support the addition of Python and JSON examples.&lt;br /&gt;
* Worked on the following pull requests:&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5688 #5688]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5773 #5773]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5775 #5775]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5784 #5784]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5785 #5785]&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to the g.mapset and r.what.color modules.&lt;br /&gt;
* If time permits, I will begin improving the r.info interface: [https://github.com/OSGeo/grass/issues/5793 Issue #5793]&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
'''Project Discussions and Meetings'''&lt;br /&gt;
* '''14 May 2025''': Introductory meeting discussing JSON support and overall project milestones.&lt;br /&gt;
* '''21 May 2025''': Introduction with fellow developers. Discussed priority tools, adding Python/Pandas examples, and approaches for finalizing the JSON schema for each module.&lt;br /&gt;
&lt;br /&gt;
== Week-1 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.mapset''': Added JSON output support, now you can use -p and -l flags to get JSON-formatted results.&lt;br /&gt;
* '''r.univar''': Fixed a bug causing an uninitialized zone_value.&lt;br /&gt;
* '''r.what.color''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5822 #5822])&lt;br /&gt;
* '''r.info (regression tests)''': To maintain backward compatibility while updating its interface, I added strong regression tests.&lt;br /&gt;
* '''r.info (interface improvements)''': Began improving the module’s interface. (See PR [https://github.com/OSGeo/grass/pull/5859 #5859])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.version (see issue [https://github.com/OSGeo/grass/issues/5816 #5816]).&lt;br /&gt;
* Add JSON output support to i.group (see issue [https://github.com/OSGeo/grass/issues/5815 #5815]).&lt;br /&gt;
* If time permits, write tests for r.stats (see issue [https://github.com/OSGeo/grass/issues/5814 #5814]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-2 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.version''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5863 #5863])&lt;br /&gt;
* '''i.group''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5870 #5870])&lt;br /&gt;
* '''r.stats (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats''': Added tests for JSON output; this uncovered a bug, which was fixed alongside.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.distance (see issue [https://github.com/OSGeo/grass/issues/5846 #5846]).&lt;br /&gt;
* Add JSON output support to g.list (see issue [https://github.com/OSGeo/grass/issues/5848 #5848]).&lt;br /&gt;
* If time permits, fix the JSON output format of g.region (see issue [https://github.com/OSGeo/grass/issues/5828 #5828]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-3 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.distance''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5898 #5898])&lt;br /&gt;
* '''r.stats''': Fixed a bug causing an uninitialized &amp;lt;code&amp;gt;window&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
* '''g.list (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''g.list''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5921 #5921])&lt;br /&gt;
* '''g.region''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5929 #5929])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.to.db (see issue [https://github.com/OSGeo/grass/pull/5711 #5711]).&lt;br /&gt;
* Update JSON output format and documentation of r.profile (see issue [https://github.com/OSGeo/grass/pull/5834 #5834]).&lt;br /&gt;
* If time permits, add shell and csv output formats to r.univar (see issue [https://github.com/OSGeo/grass/pull/5824 #5824]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-4 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.to.db''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5946 #5946])&lt;br /&gt;
* '''r.profile''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5962 #5962])&lt;br /&gt;
* '''r.univar''': Implemented SHELL and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/5966 #5966])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.regression.line (see issue [https://github.com/OSGeo/grass/pull/5950 #5950]).&lt;br /&gt;
* Add JSON output support to r.stats.quantile (see issue [https://github.com/OSGeo/grass/pull/5951 #5951]).&lt;br /&gt;
* Add JSON output support to r.volume (see issue [https://github.com/OSGeo/grass/pull/5949 #5949]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-5 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.line (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.line''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5993 #5993])&lt;br /&gt;
* '''r.stats.quantile (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats.quantile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6007 #6007])&lt;br /&gt;
* '''r.volume (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.volume''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6036 #6036])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to m.measure (see issue [https://github.com/OSGeo/grass/pull/6006 #6006]).&lt;br /&gt;
* Add JSON output support to db.columns (see issue [https://github.com/OSGeo/grass/pull/6008 #6008]).&lt;br /&gt;
* Add JSON output support to db.connect (see issue [https://github.com/OSGeo/grass/pull/6009 #6009]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-6 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''db.columns''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6042 #6042])&lt;br /&gt;
* '''m.measure (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''m.measure''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6053 #6053])&lt;br /&gt;
* '''db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6059 #6059])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to v.db.connect (see issue [https://github.com/OSGeo/grass/pull/6014 #6014]).&lt;br /&gt;
* Add JSON output support to r.regression.multi (see issue [https://github.com/OSGeo/grass/pull/6010 #6010]).&lt;br /&gt;
* If time permits, add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* If time permits, add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-7 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.multi (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''v.db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.multi''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6075 #6075])&lt;br /&gt;
* '''v.db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6077 #6077])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* Add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
* If time permits, add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-8 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.findfile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6091 #6091])&lt;br /&gt;
* '''r3.info (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a flag-handling bug.&lt;br /&gt;
* '''r3.info''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6103 #6103])&lt;br /&gt;
* '''v.what.rast (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a sorting bug.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
* Update format to CSV instead of shell in v.category (see issue [https://github.com/OSGeo/grass/pull/6025 #6025]).&lt;br /&gt;
* Add CSV output support to r.stats (see issue [https://github.com/OSGeo/grass/issues/5835 #5835]).&lt;br /&gt;
* If time permits, add CSV output support to r.profile (see issue [https://github.com/OSGeo/grass/issues/5958 #5958]).&lt;br /&gt;
* If time permits, add CSV headers to r.volume (see issue [https://github.com/OSGeo/grass/issues/6049 #6049]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I don’t have any blockers this week. However, I’ll be a little busy with some personal work from August 3 to August 10, so I’ll try to complete next week’s tasks this week itself.&lt;br /&gt;
&lt;br /&gt;
== Week-9 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.category''': Updated format to CSV instead of shell. (See PR [https://github.com/OSGeo/grass/pull/6132 #6132])&lt;br /&gt;
* '''r.stats''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6133 #6133])&lt;br /&gt;
* '''r.volume''': Implemented CSV column headers support. (See PR [https://github.com/OSGeo/grass/pull/6134 #6134])&lt;br /&gt;
* '''v.what.rast''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6140 #6140])&lt;br /&gt;
* '''r.profile''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6145 #6145])&lt;br /&gt;
* '''r.distance (regression tests)''': Updated regression tests to ensure backward compatibility with new JSON support. (See PR [https://github.com/OSGeo/grass/pull/6150 #6150])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* I’ll be a bit busy with some personal work from August 3 to 10, so I completed next week’s tasks last week itself. I’ve already informed my mentors about my limited availability.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* Yes, I’ll be a bit busy with some personal work from August 3 to 10.&lt;br /&gt;
&lt;br /&gt;
== Week-10 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* This week I was busy with some personal work, so I did not complete any additional tasks. However, I had already finished this week’s tasks last week. This week, I mostly focused on handling reviews for those PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.distance (see issue [https://github.com/OSGeo/grass/issues/6135 #6135]).&lt;br /&gt;
* Add JSON output support to v.class (see issue [https://github.com/OSGeo/grass/issues/6136 #6136]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-11 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.distance''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6204 #6204])&lt;br /&gt;
* '''v.class''': Updated regression tests to ensure backward compatibility with new JSON support and fixed a out-of-bounds bug. (See PR [https://github.com/OSGeo/grass/pull/6205 #6205])&lt;br /&gt;
* '''v.class''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6210 #6210])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Discuss next week’s tasks with my mentors, if no issues are assigned, I’ll identify tools that currently lack JSON support and evaluate which ones are feasible to add it to.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-12 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.what''': Update JSON output format. (See PR [https://github.com/OSGeo/grass/pull/6252 #6252])&lt;br /&gt;
* Addressed review comments on my open PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
= Final Report =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Title''' || Add JSON output to different tools in C for GRASS&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo (Open Source Geospatial Foundation)]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''Program''' || Google Summer of Code 2025&lt;br /&gt;
|-&lt;br /&gt;
| '''Contributions''' || [https://github.com/OSGeo/grass/pulls?q=is%3Apr+author%3ANishantBansal2003+ Pull Requests]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
During my GSoC project, I addressed the challenge that most GRASS tools produced only plain text output, forcing users to write custom parsing code for Python-based workflows. The task was to make these tools more data-science friendly by adding structured output formats. To achieve this, I extended the use of the Parson library to implement consistent JSON output across multiple modules, refined the JSON structure introduced in the previous GSoC, and added optional support for SHELL and CSV outputs where appropriate. I developed comprehensive Python test cases, ensured backward compatibility, and provided documentation with practical examples such as loading JSON into pandas. As a result, GRASS users can now directly consume structured outputs in modern workflows, reducing parsing overhead, improving interoperability, and paving the way for broader adoption of GRASS in data science contexts.&lt;br /&gt;
&lt;br /&gt;
== The state of integration BEFORE the start of GSoC ==&lt;br /&gt;
Before the start of GSoC, the integration of GRASS with data science workflows was limited due to several challenges. The JSON outputs introduced in the previous GSoC contained deeply nested hierarchies, making them difficult to use directly with libraries such as '''pandas''' or in broader data science pipelines. While some tools already supported JSON (e.g., &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;), many important and highly demanded modules lacked JSON support, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt; and many more. This lack of consistency limited the seamless adoption of GRASS in analytics and machine learning contexts. Moreover, there was no clear '''documentation of the JSON schema''' or guidance on how to parse and utilize these outputs effectively in '''python or pandas''', which made it difficult for users to understand the use cases and integrate GRASS outputs into modern data science workflows.&lt;br /&gt;
&lt;br /&gt;
== The state of integration AFTER GSoC ==&lt;br /&gt;
&lt;br /&gt;
After GSoC, the integration state of JSON and alternative output formats in GRASS has significantly improved. I refactored the JSON structures for tools such as &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;, and others, removing unnecessary nesting introduced during the previous GSoC. This makes their outputs much easier to consume directly in &amp;lt;b&amp;gt;Python&amp;lt;/b&amp;gt; or with &amp;lt;b&amp;gt;pandas&amp;lt;/b&amp;gt;. In addition, JSON support has been extended to many essential and frequently used modules, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;, and many more. I also added detailed documentation of the JSON schema and provided examples showing how to parse and use these outputs effectively with Python and pandas. Together, these improvements make the adoption of GRASS in modern &amp;lt;b&amp;gt;data science workflows&amp;lt;/b&amp;gt; far more seamless and accessible.&lt;br /&gt;
&lt;br /&gt;
=== Enhancements made per tool ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;: Simplified JSON structure for univariate statistics, removed unnecessary hierarchy, and added new output format options (CSV, shell).&lt;br /&gt;
* &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;: Added JSON support for querying raster map colors, with a Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;: Added JSON support for reporting the current mapset, with a Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;: Updated JSON structure for raster map metadata, removing hierarchy for easier parsing. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;: Simplified JSON output for geographic region boundaries, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;: Added JSON support for GRASS version information, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;: Added JSON support for listing imagery groups, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;: Added JSON and CSV support for raster area statistics, with Python and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;: Refined JSON schema for nearest element queries, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;: Added JSON support for listing GRASS database files, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;: Updated JSON schema for printing vector attribute values, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;: Simplified JSON output, added CSV support, and included a matplotlib example for profile visualization.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;: Updated JSON schema for linear regression between rasters, with Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;: Updated JSON schema for category quantiles, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;: Added JSON support for raster volume calculations, fixed missing headers in CSV output, and provided pandas examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.columns&amp;lt;/code&amp;gt;: Added JSON output for listing database table columns, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;: Added JSON output for measuring lengths and areas, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.connect&amp;lt;/code&amp;gt;: Added JSON output for DB connection info, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.multi&amp;lt;/code&amp;gt;: Added JSON output for multiple regression between rasters, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.db.connect&amp;lt;/code&amp;gt;: Added JSON output for vector map attribute connections, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.findfile&amp;lt;/code&amp;gt;: Added JSON output for GRASS database file search, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;: Added JSON output for 3D raster map info, with Python example. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;: Added JSON output for extracting raster values at vector points, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt;: Added JSON and CSV support for locating closest points between raster objects, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;: Added JSON and CSV support for attribute data, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;: Migrated from manually written JSON to Parson-based JSON output, simplified schema, and provided Python parsing examples.&lt;br /&gt;
&lt;br /&gt;
All these changes were accompanied by regression tests to ensure that new JSON/CSV/SHELL/PLAIN output options do not break existing functionality. Additionally, I introduced comprehensive Python test cases for these outputs, making the enhancements reliable and future-proof. During this work, I also fixed several bugs in modules such as &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;, strengthening the stability of GRASS as a whole.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
To sum up, I’m glad to have met the three core objectives of my project with the constant support of my mentors:&lt;br /&gt;
&lt;br /&gt;
* Brought JSON output to several important and long-requested modules, added regression tests, and ensured reliable future test coverage.&lt;br /&gt;
* Enhanced the JSON schema introduced in last year’s GSoC by reducing unnecessary hierarchy, making it more consistent across tools, and providing Python/Pandas examples for practical use.&lt;br /&gt;
* Expanded &amp;lt;b&amp;gt;CSV&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;SHELL&amp;lt;/b&amp;gt; output formats to additional tools where they could bring value.&lt;br /&gt;
&lt;br /&gt;
This journey has been both rewarding and educational, and I’m grateful for the opportunity to contribute to GRASS through GSoC 2025. I especially want to thank &amp;lt;b&amp;gt;Anna Petrasova&amp;lt;/b&amp;gt; and the GRASS Development Team for their guidance and support. I’m excited to keep building on this work and further extend JSON and other features in the future.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
There is significant scope to extend structured output support across GRASS tools. In particular, future efforts should focus on:&lt;br /&gt;
* Expanding JSON output to additional modules, with details tracked here: [https://github.com/orgs/OSGeo/projects/10 GRASS JSON Outputs Project].&lt;br /&gt;
* Refining and standardizing the JSON schema to better support complex workflows and integrations.&lt;br /&gt;
* Exploring and implementing other output formats (e.g., SHELL, CSV, PLAIN) where they can improve usability and automation.&lt;br /&gt;
I also plan to continue contributing to GRASS by extending JSON support to more modules and engaging in community discussions around schema design and format integration.&lt;br /&gt;
&lt;br /&gt;
== Log of Pull Requests ==&lt;br /&gt;
Below is a list of pull requests submitted to the GRASS repository during GSoC 2025:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pull Request !! Description  !! Date   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5688 #5688] || r.univar: Fix JSON structure || May 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5773 #5773] || r.what.color: Add test file || May 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5775 #5775] || g.mapset: Add test file || May 26, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5784 #5784] || r.info: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;Closed&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5785 #5785] || g.region: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5810 #5810] || g.mapset: Add JSON support || June 2, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5821 #5821] || r.univar: Fix uninitialized zone_value || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5822 #5822] || r.what.color: Add JSON support || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5842 #5842] || r.info: Update test file || June 5, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5859 #5859] || r.info: Improve interface || June 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5863 #5863] || g.version: Add JSON support || June 9, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5870 #5870] || i.group: Add JSON support || June 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5879 #5879] || r.stats: Add test file || June 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5892 #5892] || r.stats: Add tests for JSON output || June 14, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5898 #5898] || v.distance: Update JSON format || June 16, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5900 #5900] || r.stats: fix uninitialised window value || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5906 #5906] || g.list: Add test file || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5921 #5921] || g.list: Add JSON support || June 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5929 #5929] || g.region: Update JSON format || June 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5946 #5946] || v.to.db: Update JSON format || June 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5962 #5962] || r.profile: Update JSON format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5966 #5966] || r.univar: Add shell and CSV format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5990 #5990] || r.regression.line: Add test file || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5993 #5993] || r.regression.line: Add JSON support || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6002 #6002] || r.stats.quantile: Add test file || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6007 #6007] || r.stats.quantile: Add JSON support || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6027 #6027] || r.volume: Add test file || July 4, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6036 #6036] || r.volume: Add JSON support || July 6, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6042 #6042] || db.columns: Add JSON support || July 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6051 #6051] || m.measure: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6052 #6052] || db.connect: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6053 #6053] || m.measure: Add JSON support || July 11, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6059 #6059] || db.connect: Add JSON support || July 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6066 #6066] || r.regression.multi: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6067 #6067] || v.db.connect: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6075 #6075] || r.regression.multi: Add JSON support || July 18, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6077 #6077] || v.db.connect: Add JSON support || July 19, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6091 #6091] || g.findfile: Add JSON support || July 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6098 #6098] || r3.info: Add test file || July 22, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6103 #6103] || r3.info: Add JSON support || July 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6109 #6109] || v.what.rast: Add test file || July 24, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6132 #6132] || v.category: Use CSV format instead of shell format || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6133 #6133] || r.stats: add CSV support || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6134 #6134] || r.volume: add csv column headers || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6140 #6140] || v.what.rast: Add JSON support || July 29, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6145 #6145] || r.profile: Add CSV support || July 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6150 #6150] || r.distance: Update existing test cases || August 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6204 #6204] || r.distance: Add JSON and CSV support || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6205 #6205] || v.class: Add more test cases and fix out-of-bounds bug || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6210 #6210] || v.class: Add JSON and CSV support || August 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6252 #6252] || v.what: Update JSON output format || August 23, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Additional Links ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Ttile&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| OSGeo Wiki Page&lt;br /&gt;
| [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C Add JSON output to different tools in C for GRASS]&lt;br /&gt;
|-&lt;br /&gt;
| Github Fork&lt;br /&gt;
| [https://github.com/NishantBansal2003/grass GitHub Fork]&lt;br /&gt;
|-&lt;br /&gt;
| GSoC Page&lt;br /&gt;
| [https://summerofcode.withgoogle.com/programs/2025/projects/GPVGd3DH Link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples &amp;amp; Images ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{GSoC}}&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28661</id>
		<title>GRASS GSoC 2025 Add JSON output to different tools in C</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28661"/>
		<updated>2025-08-24T06:13:51Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Nishant Bansal&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo - Open Source Geospatial Foundation]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/NishantBansal2003/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''GSoC proposal''' || [https://docs.google.com/document/d/1ZPQ9RXU7b_RUDmBmAMeK7ZjFAV1WC7Urd1Zlz678jyw/edit?tab=t.0#heading=h.z6ne0og04bp5 View Proposal]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Abstract =&lt;br /&gt;
Currently, most GRASS tools produce data in plain text by default. This means that users who want to process the output in Python need to create custom parsing code. To make this easier, several modules could be improved by oﬀering JSON as an alternative output format. Recently, the Parson library was added to the GRASS codebase to support JSON output in addition to plain text. Building on the advancements made during the last GSoC, my project aims to expand JSON output capabilities to more tools using the Parson library. I will also work on making the JSON structure introduced in the previous GSoC more useful and consistent. Additionally, I plan to add support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
&lt;br /&gt;
# Working with mentors to finalize the structure of the JSON output.&lt;br /&gt;
# Adding an option to choose the output format (plain text or JSON) for each updated tool.&lt;br /&gt;
# Make the JSON structure introduced during the last GSoC more useful and consistent across tools.&lt;br /&gt;
# Developing Python test cases to ensure that the JSON output works correctly and to avoid future issues.&lt;br /&gt;
# Providing basic documentation and example JSON outputs for each modified tool.&lt;br /&gt;
# Adding support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
# Develop simple examples demonstrating how to use JSON output in a data science workflow, such as reading JSON data into pandas or python.&lt;br /&gt;
&lt;br /&gt;
= Timeline =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Period !! Timeline  !! Tasks   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period &lt;br /&gt;
||&lt;br /&gt;
May 8 - June 1  &lt;br /&gt;
|| &lt;br /&gt;
# Reviewed the work done during the last GSoC to stabilize the JSON output.&lt;br /&gt;
# Discussed the priority tools for adding JSON support.&lt;br /&gt;
# Read GRASS documentation to add Python and JSON examples to the documentation.&lt;br /&gt;
|| &lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;13&amp;quot; | Official Coding Period &lt;br /&gt;
|-&lt;br /&gt;
| '''Week 1''' (June 2 - June 8) || &lt;br /&gt;
# Add JSON support for g.mapset [https://github.com/OSGeo/grass/pull/5810 #5810]&lt;br /&gt;
# Fix uninitialized zone_value in r.univar [https://github.com/OSGeo/grass/pull/5821 #5821]&lt;br /&gt;
# Add JSON support for r.what.color [https://github.com/OSGeo/grass/pull/5822 #5822]&lt;br /&gt;
# Update test file in r.info [https://github.com/OSGeo/grass/pull/5842 #5842]&lt;br /&gt;
# Improve interface for r.info [https://github.com/OSGeo/grass/pull/5859 #5859]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 2''' (June 9 - June 15) ||&lt;br /&gt;
# Add JSON support for g.version [https://github.com/OSGeo/grass/pull/5863 #5863]&lt;br /&gt;
# Add JSON support for i.group [https://github.com/OSGeo/grass/pull/5870 #5870]&lt;br /&gt;
# Add test file in r.stats [https://github.com/OSGeo/grass/pull/5879 #5879]&lt;br /&gt;
# Add tests for JSON output in r.stats [https://github.com/OSGeo/grass/pull/5892 #5892]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 3''' (June 16 - June 22) ||&lt;br /&gt;
# Update the JSON output schema of v.distance [https://github.com/OSGeo/grass/pull/5898 #5898]&lt;br /&gt;
# Fix uninitialized window variable in r.stats [https://github.com/OSGeo/grass/pull/5900 #5900]&lt;br /&gt;
# Add test file in g.list [https://github.com/OSGeo/grass/pull/5906 #5906]&lt;br /&gt;
# Add JSON support for g.list [https://github.com/OSGeo/grass/pull/5921 #5921]&lt;br /&gt;
# Update the JSON output schema of g.region [https://github.com/OSGeo/grass/pull/5929 #5929]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 4''' (June 23 - June 29) ||&lt;br /&gt;
# Update the JSON output schema of v.to.db [https://github.com/OSGeo/grass/pull/5946 #5946]&lt;br /&gt;
# Update the JSON output schema of r.profile [https://github.com/OSGeo/grass/pull/5962 #5962]&lt;br /&gt;
# Add SHELL and CSV output support for r.univar [https://github.com/OSGeo/grass/pull/5966 #5966]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 5''' (June 30 - July 6) ||&lt;br /&gt;
# Add test file in r.regression.line [https://github.com/OSGeo/grass/pull/5990 #5990]&lt;br /&gt;
# Add JSON support for r.regression.line [https://github.com/OSGeo/grass/pull/5993 #5993]&lt;br /&gt;
# Add test file in r.stats.quantile [https://github.com/OSGeo/grass/pull/6002 #6002]&lt;br /&gt;
# Add JSON support for r.stats.quantile [https://github.com/OSGeo/grass/pull/6007 #6007]&lt;br /&gt;
# Add test file in r.volume [https://github.com/OSGeo/grass/pull/6027 #6027]&lt;br /&gt;
# Add JSON support for r.volume [https://github.com/OSGeo/grass/pull/6036 #6036]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 6''' (July 7 - July 13) ||&lt;br /&gt;
# Add JSON support for db.columns [https://github.com/OSGeo/grass/pull/6042 #6042]&lt;br /&gt;
# Add test file in m.measure [https://github.com/OSGeo/grass/pull/6051 #6051]&lt;br /&gt;
# Add test file in db.connect [https://github.com/OSGeo/grass/pull/6052 #6052]&lt;br /&gt;
# Add JSON support for m.measure [https://github.com/OSGeo/grass/pull/6053 #6053]&lt;br /&gt;
# Add JSON support for db.connect [https://github.com/OSGeo/grass/pull/6059 #6059]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 7''' (July 14 - July 20) ||&lt;br /&gt;
# Add test file in r.regression.multi [https://github.com/OSGeo/grass/pull/6066 #6066]&lt;br /&gt;
# Add test file in v.db.connect [https://github.com/OSGeo/grass/pull/6067 #6067]&lt;br /&gt;
# Add JSON support for r.regression.multi [https://github.com/OSGeo/grass/pull/6075 #6075]&lt;br /&gt;
# Add JSON support for v.db.connect [https://github.com/OSGeo/grass/pull/6077 #6077]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 8''' (July 21 - July 27) ||&lt;br /&gt;
# Add JSON support for g.findfile [https://github.com/OSGeo/grass/pull/6091 #6091]&lt;br /&gt;
# Add test file in r3.info [https://github.com/OSGeo/grass/pull/6098 #6098]&lt;br /&gt;
# Add JSON support for r3.info [https://github.com/OSGeo/grass/pull/6103 #6103]&lt;br /&gt;
# Add test file in v.what.rast [https://github.com/OSGeo/grass/pull/6109 #6109]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 9''' (July 28 - August 3) ||&lt;br /&gt;
# Update format to CSV instead of shell in v.category [https://github.com/OSGeo/grass/pull/6132 #6132]&lt;br /&gt;
# Add CSV output support to r.stats [https://github.com/OSGeo/grass/pull/6133 #6133]&lt;br /&gt;
# Add CSV headers to r.volume [https://github.com/OSGeo/grass/pull/6134 #6134]&lt;br /&gt;
# Add JSON support for v.what.rast [https://github.com/OSGeo/grass/pull/6140 #6140]&lt;br /&gt;
# Add CSV output support to r.profile [https://github.com/OSGeo/grass/pull/6145 #6145]&lt;br /&gt;
# Update test cases in r.distance [https://github.com/OSGeo/grass/pull/6150 #6150]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 10''' (August 4 - August 10) ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 11''' (August 11 - August 17) ||&lt;br /&gt;
# Add JSON and CSV support for r.distance [https://github.com/OSGeo/grass/pull/6204 #6204]&lt;br /&gt;
# Add more test cases in v.class [https://github.com/OSGeo/grass/pull/6205 #6205]&lt;br /&gt;
# Add JSON and CSV support for v.class [https://github.com/OSGeo/grass/pull/6210 #6210]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 12''' (August 18 - August 24) ||&lt;br /&gt;
# Update JSON output format for v.what [https://github.com/OSGeo/grass/pull/6252 #6252]&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Evaluation Period &lt;br /&gt;
|-&lt;br /&gt;
| August 25 - September 1 ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
# Submit code, final evaluation and write the final GSoC report.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Reports =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* Introduced myself on the [https://discourse.osgeo.org/t/gsoc-2025-introduction-nishant-bansal/147005 OSGeo Discourse mailing list].&lt;br /&gt;
* Created both my [https://wiki.osgeo.org/wiki/User:Nishantbansal2003 personal Wiki page] and the [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C project Wiki page], adding all necessary project-related information.&lt;br /&gt;
* Read GRASS documentation to support the addition of Python and JSON examples.&lt;br /&gt;
* Worked on the following pull requests:&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5688 #5688]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5773 #5773]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5775 #5775]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5784 #5784]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5785 #5785]&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to the g.mapset and r.what.color modules.&lt;br /&gt;
* If time permits, I will begin improving the r.info interface: [https://github.com/OSGeo/grass/issues/5793 Issue #5793]&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
'''Project Discussions and Meetings'''&lt;br /&gt;
* '''14 May 2025''': Introductory meeting discussing JSON support and overall project milestones.&lt;br /&gt;
* '''21 May 2025''': Introduction with fellow developers. Discussed priority tools, adding Python/Pandas examples, and approaches for finalizing the JSON schema for each module.&lt;br /&gt;
&lt;br /&gt;
== Week-1 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.mapset''': Added JSON output support, now you can use -p and -l flags to get JSON-formatted results.&lt;br /&gt;
* '''r.univar''': Fixed a bug causing an uninitialized zone_value.&lt;br /&gt;
* '''r.what.color''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5822 #5822])&lt;br /&gt;
* '''r.info (regression tests)''': To maintain backward compatibility while updating its interface, I added strong regression tests.&lt;br /&gt;
* '''r.info (interface improvements)''': Began improving the module’s interface. (See PR [https://github.com/OSGeo/grass/pull/5859 #5859])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.version (see issue [https://github.com/OSGeo/grass/issues/5816 #5816]).&lt;br /&gt;
* Add JSON output support to i.group (see issue [https://github.com/OSGeo/grass/issues/5815 #5815]).&lt;br /&gt;
* If time permits, write tests for r.stats (see issue [https://github.com/OSGeo/grass/issues/5814 #5814]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-2 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.version''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5863 #5863])&lt;br /&gt;
* '''i.group''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5870 #5870])&lt;br /&gt;
* '''r.stats (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats''': Added tests for JSON output; this uncovered a bug, which was fixed alongside.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.distance (see issue [https://github.com/OSGeo/grass/issues/5846 #5846]).&lt;br /&gt;
* Add JSON output support to g.list (see issue [https://github.com/OSGeo/grass/issues/5848 #5848]).&lt;br /&gt;
* If time permits, fix the JSON output format of g.region (see issue [https://github.com/OSGeo/grass/issues/5828 #5828]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-3 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.distance''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5898 #5898])&lt;br /&gt;
* '''r.stats''': Fixed a bug causing an uninitialized &amp;lt;code&amp;gt;window&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
* '''g.list (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''g.list''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5921 #5921])&lt;br /&gt;
* '''g.region''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5929 #5929])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.to.db (see issue [https://github.com/OSGeo/grass/pull/5711 #5711]).&lt;br /&gt;
* Update JSON output format and documentation of r.profile (see issue [https://github.com/OSGeo/grass/pull/5834 #5834]).&lt;br /&gt;
* If time permits, add shell and csv output formats to r.univar (see issue [https://github.com/OSGeo/grass/pull/5824 #5824]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-4 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.to.db''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5946 #5946])&lt;br /&gt;
* '''r.profile''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5962 #5962])&lt;br /&gt;
* '''r.univar''': Implemented SHELL and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/5966 #5966])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.regression.line (see issue [https://github.com/OSGeo/grass/pull/5950 #5950]).&lt;br /&gt;
* Add JSON output support to r.stats.quantile (see issue [https://github.com/OSGeo/grass/pull/5951 #5951]).&lt;br /&gt;
* Add JSON output support to r.volume (see issue [https://github.com/OSGeo/grass/pull/5949 #5949]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-5 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.line (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.line''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5993 #5993])&lt;br /&gt;
* '''r.stats.quantile (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats.quantile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6007 #6007])&lt;br /&gt;
* '''r.volume (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.volume''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6036 #6036])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to m.measure (see issue [https://github.com/OSGeo/grass/pull/6006 #6006]).&lt;br /&gt;
* Add JSON output support to db.columns (see issue [https://github.com/OSGeo/grass/pull/6008 #6008]).&lt;br /&gt;
* Add JSON output support to db.connect (see issue [https://github.com/OSGeo/grass/pull/6009 #6009]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-6 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''db.columns''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6042 #6042])&lt;br /&gt;
* '''m.measure (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''m.measure''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6053 #6053])&lt;br /&gt;
* '''db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6059 #6059])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to v.db.connect (see issue [https://github.com/OSGeo/grass/pull/6014 #6014]).&lt;br /&gt;
* Add JSON output support to r.regression.multi (see issue [https://github.com/OSGeo/grass/pull/6010 #6010]).&lt;br /&gt;
* If time permits, add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* If time permits, add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-7 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.multi (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''v.db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.multi''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6075 #6075])&lt;br /&gt;
* '''v.db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6077 #6077])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* Add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
* If time permits, add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-8 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.findfile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6091 #6091])&lt;br /&gt;
* '''r3.info (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a flag-handling bug.&lt;br /&gt;
* '''r3.info''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6103 #6103])&lt;br /&gt;
* '''v.what.rast (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a sorting bug.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
* Update format to CSV instead of shell in v.category (see issue [https://github.com/OSGeo/grass/pull/6025 #6025]).&lt;br /&gt;
* Add CSV output support to r.stats (see issue [https://github.com/OSGeo/grass/issues/5835 #5835]).&lt;br /&gt;
* If time permits, add CSV output support to r.profile (see issue [https://github.com/OSGeo/grass/issues/5958 #5958]).&lt;br /&gt;
* If time permits, add CSV headers to r.volume (see issue [https://github.com/OSGeo/grass/issues/6049 #6049]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I don’t have any blockers this week. However, I’ll be a little busy with some personal work from August 3 to August 10, so I’ll try to complete next week’s tasks this week itself.&lt;br /&gt;
&lt;br /&gt;
== Week-9 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.category''': Updated format to CSV instead of shell. (See PR [https://github.com/OSGeo/grass/pull/6132 #6132])&lt;br /&gt;
* '''r.stats''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6133 #6133])&lt;br /&gt;
* '''r.volume''': Implemented CSV column headers support. (See PR [https://github.com/OSGeo/grass/pull/6134 #6134])&lt;br /&gt;
* '''v.what.rast''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6140 #6140])&lt;br /&gt;
* '''r.profile''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6145 #6145])&lt;br /&gt;
* '''r.distance (regression tests)''': Updated regression tests to ensure backward compatibility with new JSON support. (See PR [https://github.com/OSGeo/grass/pull/6150 #6150])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* I’ll be a bit busy with some personal work from August 3 to 10, so I completed next week’s tasks last week itself. I’ve already informed my mentors about my limited availability.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* Yes, I’ll be a bit busy with some personal work from August 3 to 10.&lt;br /&gt;
&lt;br /&gt;
== Week-10 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* This week I was busy with some personal work, so I did not complete any additional tasks. However, I had already finished this week’s tasks last week. This week, I mostly focused on handling reviews for those PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.distance (see issue [https://github.com/OSGeo/grass/issues/6135 #6135]).&lt;br /&gt;
* Add JSON output support to v.class (see issue [https://github.com/OSGeo/grass/issues/6136 #6136]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-11 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.distance''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6204 #6204])&lt;br /&gt;
* '''v.class''': Updated regression tests to ensure backward compatibility with new JSON support and fixed a out-of-bounds bug. (See PR [https://github.com/OSGeo/grass/pull/6205 #6205])&lt;br /&gt;
* '''v.class''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6210 #6210])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Discuss next week’s tasks with my mentors, if no issues are assigned, I’ll identify tools that currently lack JSON support and evaluate which ones are feasible to add it to.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-12 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.what''': Update JSON output format. (See PR [https://github.com/OSGeo/grass/pull/6252 #6252])&lt;br /&gt;
* Addressed review comments on my open PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
= Final Report =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Title''' || Add JSON output to different tools in C for GRASS&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo (Open Source Geospatial Foundation)]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''Program''' || Google Summer of Code 2025&lt;br /&gt;
|-&lt;br /&gt;
| '''Contributions''' || [https://github.com/OSGeo/grass/pulls?q=is%3Apr+author%3ANishantBansal2003+ Pull Requests]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
During my GSoC project, I addressed the challenge that most GRASS tools produced only plain text output, forcing users to write custom parsing code for Python-based workflows. The task was to make these tools more data-science friendly by adding structured output formats. To achieve this, I extended the use of the Parson library to implement consistent JSON output across multiple modules, refined the JSON structure introduced in the previous GSoC, and added optional support for SHELL and CSV outputs where appropriate. I developed comprehensive Python test cases, ensured backward compatibility, and provided documentation with practical examples such as loading JSON into pandas. As a result, GRASS users can now directly consume structured outputs in modern workflows, reducing parsing overhead, improving interoperability, and paving the way for broader adoption of GRASS in data science contexts.&lt;br /&gt;
&lt;br /&gt;
== The state of integration BEFORE the start of GSoC ==&lt;br /&gt;
Before the start of GSoC, the integration of GRASS with data science workflows was limited due to several challenges. The JSON outputs introduced in the previous GSoC contained deeply nested hierarchies, making them difficult to use directly with libraries such as '''pandas''' or in broader data science pipelines. While some tools already supported JSON (e.g., &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;), many important and highly demanded modules lacked JSON support, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt; and many more. This lack of consistency limited the seamless adoption of GRASS in analytics and machine learning contexts. Moreover, there was no clear '''documentation of the JSON schema''' or guidance on how to parse and utilize these outputs effectively in '''python or pandas''', which made it difficult for users to understand the use cases and integrate GRASS outputs into modern data science workflows.&lt;br /&gt;
&lt;br /&gt;
== The state of integration AFTER GSoC ==&lt;br /&gt;
&lt;br /&gt;
After GSoC, the integration state of JSON and alternative output formats in GRASS has significantly improved. I refactored the JSON structures for tools such as &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;, and others, removing unnecessary nesting introduced during the previous GSoC. This makes their outputs much easier to consume directly in &amp;lt;b&amp;gt;Python&amp;lt;/b&amp;gt; or with &amp;lt;b&amp;gt;pandas&amp;lt;/b&amp;gt;. In addition, JSON support has been extended to many essential and frequently used modules, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;, and many more. I also added detailed documentation of the JSON schema and provided examples showing how to parse and use these outputs effectively with Python and pandas. Together, these improvements make the adoption of GRASS in modern &amp;lt;b&amp;gt;data science workflows&amp;lt;/b&amp;gt; far more seamless and accessible.&lt;br /&gt;
&lt;br /&gt;
=== Enhancements made per tool ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;: Simplified JSON structure for univariate statistics, removed unnecessary hierarchy, and added new output format options (CSV, shell).&lt;br /&gt;
* &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;: Added JSON support for querying raster map colors, with a Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;: Added JSON support for reporting the current mapset, with a Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;: Updated JSON structure for raster map metadata, removing hierarchy for easier parsing. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;: Simplified JSON output for geographic region boundaries, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;: Added JSON support for GRASS version information, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;: Added JSON support for listing imagery groups, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;: Added JSON and CSV support for raster area statistics, with Python and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;: Refined JSON schema for nearest element queries, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;: Added JSON support for listing GRASS database files, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;: Updated JSON schema for printing vector attribute values, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;: Simplified JSON output, added CSV support, and included a matplotlib example for profile visualization.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;: Updated JSON schema for linear regression between rasters, with Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;: Updated JSON schema for category quantiles, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;: Added JSON support for raster volume calculations, fixed missing headers in CSV output, and provided pandas examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.columns&amp;lt;/code&amp;gt;: Added JSON output for listing database table columns, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;: Added JSON output for measuring lengths and areas, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.connect&amp;lt;/code&amp;gt;: Added JSON output for DB connection info, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.multi&amp;lt;/code&amp;gt;: Added JSON output for multiple regression between rasters, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.db.connect&amp;lt;/code&amp;gt;: Added JSON output for vector map attribute connections, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.findfile&amp;lt;/code&amp;gt;: Added JSON output for GRASS database file search, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;: Added JSON output for 3D raster map info, with Python example. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;: Added JSON output for extracting raster values at vector points, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt;: Added JSON and CSV support for locating closest points between raster objects, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;: Added JSON and CSV support for attribute data, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;: Migrated from manually written JSON to Parson-based JSON output, simplified schema, and provided Python parsing examples.&lt;br /&gt;
&lt;br /&gt;
All these changes were accompanied by regression tests to ensure that new JSON/CSV/SHELL/PLAIN output options do not break existing functionality. Additionally, I introduced comprehensive Python test cases for these outputs, making the enhancements reliable and future-proof. During this work, I also fixed several bugs in modules such as &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;, strengthening the stability of GRASS as a whole.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
To sum up, I’m glad to have met the three core objectives of my project with the constant support of my mentors:&lt;br /&gt;
&lt;br /&gt;
* Brought JSON output to several important and long-requested modules, added regression tests, and ensured reliable future test coverage.&lt;br /&gt;
* Enhanced the JSON schema introduced in last year’s GSoC by reducing unnecessary hierarchy, making it more consistent across tools, and providing Python/Pandas examples for practical use.&lt;br /&gt;
* Expanded &amp;lt;b&amp;gt;CSV&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;SHELL&amp;lt;/b&amp;gt; output formats to additional tools where they could bring value.&lt;br /&gt;
&lt;br /&gt;
This journey has been both rewarding and educational, and I’m grateful for the opportunity to contribute to GRASS through GSoC 2025. I especially want to thank &amp;lt;b&amp;gt;Anna Petrasova&amp;lt;/b&amp;gt; and the GRASS Development Team for their guidance and support. I’m excited to keep building on this work and further extend JSON and other features in the future.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
There is significant scope to extend structured output support across GRASS tools. In particular, future efforts should focus on:&lt;br /&gt;
* Expanding JSON output to additional modules, with details tracked here: [https://github.com/orgs/OSGeo/projects/10 GRASS JSON Outputs Project].&lt;br /&gt;
* Refining and standardizing the JSON schema to better support complex workflows and integrations.&lt;br /&gt;
* Exploring and implementing other output formats (e.g., SHELL, CSV, PLAIN) where they can improve usability and automation.&lt;br /&gt;
I also plan to continue contributing to GRASS by extending JSON support to more modules and engaging in community discussions around schema design and format integration.&lt;br /&gt;
&lt;br /&gt;
== Log of Pull Requests ==&lt;br /&gt;
Below is a list of pull requests submitted to the GRASS repository during GSoC 2025:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pull Request !! Description  !! Date   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5688 #5688] || r.univar: Fix JSON structure || May 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5773 #5773] || r.what.color: Add test file || May 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5775 #5775] || g.mapset: Add test file || May 26, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5784 #5784] || r.info: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;Closed&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5785 #5785] || g.region: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5810 #5810] || g.mapset: Add JSON support || June 2, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5821 #5821] || r.univar: Fix uninitialized zone_value || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5822 #5822] || r.what.color: Add JSON support || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5842 #5842] || r.info: Update test file || June 5, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5859 #5859] || r.info: Improve interface || June 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5863 #5863] || g.version: Add JSON support || June 9, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5870 #5870] || i.group: Add JSON support || June 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5879 #5879] || r.stats: Add test file || June 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5892 #5892] || r.stats: Add tests for JSON output || June 14, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5898 #5898] || v.distance: Update JSON format || June 16, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5900 #5900] || r.stats: fix uninitialised window value || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5906 #5906] || g.list: Add test file || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5921 #5921] || g.list: Add JSON support || June 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5929 #5929] || g.region: Update JSON format || June 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5946 #5946] || v.to.db: Update JSON format || June 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5962 #5962] || r.profile: Update JSON format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5966 #5966] || r.univar: Add shell and CSV format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5990 #5990] || r.regression.line: Add test file || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5993 #5993] || r.regression.line: Add JSON support || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6002 #6002] || r.stats.quantile: Add test file || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6007 #6007] || r.stats.quantile: Add JSON support || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6027 #6027] || r.volume: Add test file || July 4, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6036 #6036] || r.volume: Add JSON support || July 6, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6042 #6042] || db.columns: Add JSON support || July 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6051 #6051] || m.measure: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6052 #6052] || db.connect: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6053 #6053] || m.measure: Add JSON support || July 11, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6059 #6059] || db.connect: Add JSON support || July 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6066 #6066] || r.regression.multi: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6067 #6067] || v.db.connect: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6075 #6075] || r.regression.multi: Add JSON support || July 18, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6077 #6077] || v.db.connect: Add JSON support || July 19, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6091 #6091] || g.findfile: Add JSON support || July 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6098 #6098] || r3.info: Add test file || July 22, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6103 #6103] || r3.info: Add JSON support || July 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6109 #6109] || v.what.rast: Add test file || July 24, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6132 #6132] || v.category: Use CSV format instead of shell format || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6133 #6133] || r.stats: add CSV support || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6134 #6134] || r.volume: add csv column headers || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6140 #6140] || v.what.rast: Add JSON support || July 29, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6145 #6145] || r.profile: Add CSV support || July 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6150 #6150] || r.distance: Update existing test cases || August 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6204 #6204] || r.distance: Add JSON and CSV support || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6205 #6205] || v.class: Add more test cases and fix out-of-bounds bug || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6210 #6210] || v.class: Add JSON and CSV support || August 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6252 #6252] || v.what: Update JSON output format || August 23, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Ttile&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| OSGeo Wiki Page&lt;br /&gt;
| [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C Add JSON output to different tools in C for GRASS]&lt;br /&gt;
|-&lt;br /&gt;
| Github Fork&lt;br /&gt;
| [https://github.com/NishantBansal2003/grass GitHub Fork]&lt;br /&gt;
|-&lt;br /&gt;
| GSoC Page&lt;br /&gt;
| [https://summerofcode.withgoogle.com/programs/2025/projects/GPVGd3DH Link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples &amp;amp; Images ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{GSoC}}&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28660</id>
		<title>GRASS GSoC 2025 Add JSON output to different tools in C</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28660"/>
		<updated>2025-08-24T06:06:15Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: /* Future Work */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Nishant Bansal&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo - Open Source Geospatial Foundation]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/NishantBansal2003/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''GSoC proposal''' || [https://docs.google.com/document/d/1ZPQ9RXU7b_RUDmBmAMeK7ZjFAV1WC7Urd1Zlz678jyw/edit?tab=t.0#heading=h.z6ne0og04bp5 View Proposal]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Abstract =&lt;br /&gt;
Currently, most GRASS tools produce data in plain text by default. This means that users who want to process the output in Python need to create custom parsing code. To make this easier, several modules could be improved by oﬀering JSON as an alternative output format. Recently, the Parson library was added to the GRASS codebase to support JSON output in addition to plain text. Building on the advancements made during the last GSoC, my project aims to expand JSON output capabilities to more tools using the Parson library. I will also work on making the JSON structure introduced in the previous GSoC more useful and consistent. Additionally, I plan to add support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
&lt;br /&gt;
# Working with mentors to finalize the structure of the JSON output.&lt;br /&gt;
# Adding an option to choose the output format (plain text or JSON) for each updated tool.&lt;br /&gt;
# Make the JSON structure introduced during the last GSoC more useful and consistent across tools.&lt;br /&gt;
# Developing Python test cases to ensure that the JSON output works correctly and to avoid future issues.&lt;br /&gt;
# Providing basic documentation and example JSON outputs for each modified tool.&lt;br /&gt;
# Adding support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
# Develop simple examples demonstrating how to use JSON output in a data science workflow, such as reading JSON data into pandas or python.&lt;br /&gt;
&lt;br /&gt;
= Timeline =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Period !! Timeline  !! Tasks   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period &lt;br /&gt;
||&lt;br /&gt;
May 8 - June 1  &lt;br /&gt;
|| &lt;br /&gt;
# Reviewed the work done during the last GSoC to stabilize the JSON output.&lt;br /&gt;
# Discussed the priority tools for adding JSON support.&lt;br /&gt;
# Read GRASS documentation to add Python and JSON examples to the documentation.&lt;br /&gt;
|| &lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;13&amp;quot; | Official Coding Period &lt;br /&gt;
|-&lt;br /&gt;
| '''Week 1''' (June 2 - June 8) || &lt;br /&gt;
# Add JSON support for g.mapset [https://github.com/OSGeo/grass/pull/5810 #5810]&lt;br /&gt;
# Fix uninitialized zone_value in r.univar [https://github.com/OSGeo/grass/pull/5821 #5821]&lt;br /&gt;
# Add JSON support for r.what.color [https://github.com/OSGeo/grass/pull/5822 #5822]&lt;br /&gt;
# Update test file in r.info [https://github.com/OSGeo/grass/pull/5842 #5842]&lt;br /&gt;
# Improve interface for r.info [https://github.com/OSGeo/grass/pull/5859 #5859]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 2''' (June 9 - June 15) ||&lt;br /&gt;
# Add JSON support for g.version [https://github.com/OSGeo/grass/pull/5863 #5863]&lt;br /&gt;
# Add JSON support for i.group [https://github.com/OSGeo/grass/pull/5870 #5870]&lt;br /&gt;
# Add test file in r.stats [https://github.com/OSGeo/grass/pull/5879 #5879]&lt;br /&gt;
# Add tests for JSON output in r.stats [https://github.com/OSGeo/grass/pull/5892 #5892]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 3''' (June 16 - June 22) ||&lt;br /&gt;
# Update the JSON output schema of v.distance [https://github.com/OSGeo/grass/pull/5898 #5898]&lt;br /&gt;
# Fix uninitialized window variable in r.stats [https://github.com/OSGeo/grass/pull/5900 #5900]&lt;br /&gt;
# Add test file in g.list [https://github.com/OSGeo/grass/pull/5906 #5906]&lt;br /&gt;
# Add JSON support for g.list [https://github.com/OSGeo/grass/pull/5921 #5921]&lt;br /&gt;
# Update the JSON output schema of g.region [https://github.com/OSGeo/grass/pull/5929 #5929]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 4''' (June 23 - June 29) ||&lt;br /&gt;
# Update the JSON output schema of v.to.db [https://github.com/OSGeo/grass/pull/5946 #5946]&lt;br /&gt;
# Update the JSON output schema of r.profile [https://github.com/OSGeo/grass/pull/5962 #5962]&lt;br /&gt;
# Add SHELL and CSV output support for r.univar [https://github.com/OSGeo/grass/pull/5966 #5966]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 5''' (June 30 - July 6) ||&lt;br /&gt;
# Add test file in r.regression.line [https://github.com/OSGeo/grass/pull/5990 #5990]&lt;br /&gt;
# Add JSON support for r.regression.line [https://github.com/OSGeo/grass/pull/5993 #5993]&lt;br /&gt;
# Add test file in r.stats.quantile [https://github.com/OSGeo/grass/pull/6002 #6002]&lt;br /&gt;
# Add JSON support for r.stats.quantile [https://github.com/OSGeo/grass/pull/6007 #6007]&lt;br /&gt;
# Add test file in r.volume [https://github.com/OSGeo/grass/pull/6027 #6027]&lt;br /&gt;
# Add JSON support for r.volume [https://github.com/OSGeo/grass/pull/6036 #6036]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 6''' (July 7 - July 13) ||&lt;br /&gt;
# Add JSON support for db.columns [https://github.com/OSGeo/grass/pull/6042 #6042]&lt;br /&gt;
# Add test file in m.measure [https://github.com/OSGeo/grass/pull/6051 #6051]&lt;br /&gt;
# Add test file in db.connect [https://github.com/OSGeo/grass/pull/6052 #6052]&lt;br /&gt;
# Add JSON support for m.measure [https://github.com/OSGeo/grass/pull/6053 #6053]&lt;br /&gt;
# Add JSON support for db.connect [https://github.com/OSGeo/grass/pull/6059 #6059]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 7''' (July 14 - July 20) ||&lt;br /&gt;
# Add test file in r.regression.multi [https://github.com/OSGeo/grass/pull/6066 #6066]&lt;br /&gt;
# Add test file in v.db.connect [https://github.com/OSGeo/grass/pull/6067 #6067]&lt;br /&gt;
# Add JSON support for r.regression.multi [https://github.com/OSGeo/grass/pull/6075 #6075]&lt;br /&gt;
# Add JSON support for v.db.connect [https://github.com/OSGeo/grass/pull/6077 #6077]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 8''' (July 21 - July 27) ||&lt;br /&gt;
# Add JSON support for g.findfile [https://github.com/OSGeo/grass/pull/6091 #6091]&lt;br /&gt;
# Add test file in r3.info [https://github.com/OSGeo/grass/pull/6098 #6098]&lt;br /&gt;
# Add JSON support for r3.info [https://github.com/OSGeo/grass/pull/6103 #6103]&lt;br /&gt;
# Add test file in v.what.rast [https://github.com/OSGeo/grass/pull/6109 #6109]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 9''' (July 28 - August 3) ||&lt;br /&gt;
# Update format to CSV instead of shell in v.category [https://github.com/OSGeo/grass/pull/6132 #6132]&lt;br /&gt;
# Add CSV output support to r.stats [https://github.com/OSGeo/grass/pull/6133 #6133]&lt;br /&gt;
# Add CSV headers to r.volume [https://github.com/OSGeo/grass/pull/6134 #6134]&lt;br /&gt;
# Add JSON support for v.what.rast [https://github.com/OSGeo/grass/pull/6140 #6140]&lt;br /&gt;
# Add CSV output support to r.profile [https://github.com/OSGeo/grass/pull/6145 #6145]&lt;br /&gt;
# Update test cases in r.distance [https://github.com/OSGeo/grass/pull/6150 #6150]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 10''' (August 4 - August 10) ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 11''' (August 11 - August 17) ||&lt;br /&gt;
# Add JSON and CSV support for r.distance [https://github.com/OSGeo/grass/pull/6204 #6204]&lt;br /&gt;
# Add more test cases in v.class [https://github.com/OSGeo/grass/pull/6205 #6205]&lt;br /&gt;
# Add JSON and CSV support for v.class [https://github.com/OSGeo/grass/pull/6210 #6210]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 12''' (August 18 - August 24) ||&lt;br /&gt;
# Update JSON output format for v.what [https://github.com/OSGeo/grass/pull/6252 #6252]&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Evaluation Period &lt;br /&gt;
|-&lt;br /&gt;
| August 25 - September 1 ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
# Submit code, final evaluation and write the final GSoC report.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Reports =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* Introduced myself on the [https://discourse.osgeo.org/t/gsoc-2025-introduction-nishant-bansal/147005 OSGeo Discourse mailing list].&lt;br /&gt;
* Created both my [https://wiki.osgeo.org/wiki/User:Nishantbansal2003 personal Wiki page] and the [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C project Wiki page], adding all necessary project-related information.&lt;br /&gt;
* Read GRASS documentation to support the addition of Python and JSON examples.&lt;br /&gt;
* Worked on the following pull requests:&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5688 #5688]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5773 #5773]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5775 #5775]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5784 #5784]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5785 #5785]&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to the g.mapset and r.what.color modules.&lt;br /&gt;
* If time permits, I will begin improving the r.info interface: [https://github.com/OSGeo/grass/issues/5793 Issue #5793]&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
'''Project Discussions and Meetings'''&lt;br /&gt;
* '''14 May 2025''': Introductory meeting discussing JSON support and overall project milestones.&lt;br /&gt;
* '''21 May 2025''': Introduction with fellow developers. Discussed priority tools, adding Python/Pandas examples, and approaches for finalizing the JSON schema for each module.&lt;br /&gt;
&lt;br /&gt;
== Week-1 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.mapset''': Added JSON output support, now you can use -p and -l flags to get JSON-formatted results.&lt;br /&gt;
* '''r.univar''': Fixed a bug causing an uninitialized zone_value.&lt;br /&gt;
* '''r.what.color''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5822 #5822])&lt;br /&gt;
* '''r.info (regression tests)''': To maintain backward compatibility while updating its interface, I added strong regression tests.&lt;br /&gt;
* '''r.info (interface improvements)''': Began improving the module’s interface. (See PR [https://github.com/OSGeo/grass/pull/5859 #5859])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.version (see issue [https://github.com/OSGeo/grass/issues/5816 #5816]).&lt;br /&gt;
* Add JSON output support to i.group (see issue [https://github.com/OSGeo/grass/issues/5815 #5815]).&lt;br /&gt;
* If time permits, write tests for r.stats (see issue [https://github.com/OSGeo/grass/issues/5814 #5814]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-2 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.version''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5863 #5863])&lt;br /&gt;
* '''i.group''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5870 #5870])&lt;br /&gt;
* '''r.stats (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats''': Added tests for JSON output; this uncovered a bug, which was fixed alongside.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.distance (see issue [https://github.com/OSGeo/grass/issues/5846 #5846]).&lt;br /&gt;
* Add JSON output support to g.list (see issue [https://github.com/OSGeo/grass/issues/5848 #5848]).&lt;br /&gt;
* If time permits, fix the JSON output format of g.region (see issue [https://github.com/OSGeo/grass/issues/5828 #5828]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-3 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.distance''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5898 #5898])&lt;br /&gt;
* '''r.stats''': Fixed a bug causing an uninitialized &amp;lt;code&amp;gt;window&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
* '''g.list (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''g.list''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5921 #5921])&lt;br /&gt;
* '''g.region''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5929 #5929])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.to.db (see issue [https://github.com/OSGeo/grass/pull/5711 #5711]).&lt;br /&gt;
* Update JSON output format and documentation of r.profile (see issue [https://github.com/OSGeo/grass/pull/5834 #5834]).&lt;br /&gt;
* If time permits, add shell and csv output formats to r.univar (see issue [https://github.com/OSGeo/grass/pull/5824 #5824]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-4 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.to.db''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5946 #5946])&lt;br /&gt;
* '''r.profile''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5962 #5962])&lt;br /&gt;
* '''r.univar''': Implemented SHELL and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/5966 #5966])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.regression.line (see issue [https://github.com/OSGeo/grass/pull/5950 #5950]).&lt;br /&gt;
* Add JSON output support to r.stats.quantile (see issue [https://github.com/OSGeo/grass/pull/5951 #5951]).&lt;br /&gt;
* Add JSON output support to r.volume (see issue [https://github.com/OSGeo/grass/pull/5949 #5949]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-5 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.line (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.line''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5993 #5993])&lt;br /&gt;
* '''r.stats.quantile (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats.quantile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6007 #6007])&lt;br /&gt;
* '''r.volume (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.volume''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6036 #6036])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to m.measure (see issue [https://github.com/OSGeo/grass/pull/6006 #6006]).&lt;br /&gt;
* Add JSON output support to db.columns (see issue [https://github.com/OSGeo/grass/pull/6008 #6008]).&lt;br /&gt;
* Add JSON output support to db.connect (see issue [https://github.com/OSGeo/grass/pull/6009 #6009]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-6 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''db.columns''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6042 #6042])&lt;br /&gt;
* '''m.measure (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''m.measure''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6053 #6053])&lt;br /&gt;
* '''db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6059 #6059])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to v.db.connect (see issue [https://github.com/OSGeo/grass/pull/6014 #6014]).&lt;br /&gt;
* Add JSON output support to r.regression.multi (see issue [https://github.com/OSGeo/grass/pull/6010 #6010]).&lt;br /&gt;
* If time permits, add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* If time permits, add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-7 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.multi (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''v.db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.multi''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6075 #6075])&lt;br /&gt;
* '''v.db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6077 #6077])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* Add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
* If time permits, add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-8 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.findfile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6091 #6091])&lt;br /&gt;
* '''r3.info (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a flag-handling bug.&lt;br /&gt;
* '''r3.info''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6103 #6103])&lt;br /&gt;
* '''v.what.rast (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a sorting bug.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
* Update format to CSV instead of shell in v.category (see issue [https://github.com/OSGeo/grass/pull/6025 #6025]).&lt;br /&gt;
* Add CSV output support to r.stats (see issue [https://github.com/OSGeo/grass/issues/5835 #5835]).&lt;br /&gt;
* If time permits, add CSV output support to r.profile (see issue [https://github.com/OSGeo/grass/issues/5958 #5958]).&lt;br /&gt;
* If time permits, add CSV headers to r.volume (see issue [https://github.com/OSGeo/grass/issues/6049 #6049]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I don’t have any blockers this week. However, I’ll be a little busy with some personal work from August 3 to August 10, so I’ll try to complete next week’s tasks this week itself.&lt;br /&gt;
&lt;br /&gt;
== Week-9 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.category''': Updated format to CSV instead of shell. (See PR [https://github.com/OSGeo/grass/pull/6132 #6132])&lt;br /&gt;
* '''r.stats''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6133 #6133])&lt;br /&gt;
* '''r.volume''': Implemented CSV column headers support. (See PR [https://github.com/OSGeo/grass/pull/6134 #6134])&lt;br /&gt;
* '''v.what.rast''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6140 #6140])&lt;br /&gt;
* '''r.profile''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6145 #6145])&lt;br /&gt;
* '''r.distance (regression tests)''': Updated regression tests to ensure backward compatibility with new JSON support. (See PR [https://github.com/OSGeo/grass/pull/6150 #6150])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* I’ll be a bit busy with some personal work from August 3 to 10, so I completed next week’s tasks last week itself. I’ve already informed my mentors about my limited availability.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* Yes, I’ll be a bit busy with some personal work from August 3 to 10.&lt;br /&gt;
&lt;br /&gt;
== Week-10 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* This week I was busy with some personal work, so I did not complete any additional tasks. However, I had already finished this week’s tasks last week. This week, I mostly focused on handling reviews for those PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.distance (see issue [https://github.com/OSGeo/grass/issues/6135 #6135]).&lt;br /&gt;
* Add JSON output support to v.class (see issue [https://github.com/OSGeo/grass/issues/6136 #6136]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-11 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.distance''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6204 #6204])&lt;br /&gt;
* '''v.class''': Updated regression tests to ensure backward compatibility with new JSON support and fixed a out-of-bounds bug. (See PR [https://github.com/OSGeo/grass/pull/6205 #6205])&lt;br /&gt;
* '''v.class''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6210 #6210])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Discuss next week’s tasks with my mentors, if no issues are assigned, I’ll identify tools that currently lack JSON support and evaluate which ones are feasible to add it to.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-12 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.what''': Update JSON output format. (See PR [https://github.com/OSGeo/grass/pull/6252 #6252])&lt;br /&gt;
* Addressed review comments on my open PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
= Final Report =&lt;br /&gt;
&lt;br /&gt;
== Title ==&lt;br /&gt;
Add JSON output to different tools in C for GRASS&lt;br /&gt;
&lt;br /&gt;
== Organization ==&lt;br /&gt;
OSGeo (Open Source Geospatial Foundation)&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
During my GSoC project, I addressed the challenge that most GRASS tools produced only plain text output, forcing users to write custom parsing code for Python-based workflows. The task was to make these tools more data-science friendly by adding structured output formats. To achieve this, I extended the use of the Parson library to implement consistent JSON output across multiple modules, refined the JSON structure introduced in the previous GSoC, and added optional support for SHELL and CSV outputs where appropriate. I developed comprehensive Python test cases, ensured backward compatibility, and provided documentation with practical examples such as loading JSON into pandas. As a result, GRASS users can now directly consume structured outputs in modern workflows, reducing parsing overhead, improving interoperability, and paving the way for broader adoption of GRASS in data science contexts.&lt;br /&gt;
&lt;br /&gt;
== The state of integration BEFORE the start of GSoC ==&lt;br /&gt;
Before the start of GSoC, the integration of GRASS with data science workflows was limited due to several challenges. The JSON outputs introduced in the previous GSoC contained deeply nested hierarchies, making them difficult to use directly with libraries such as '''pandas''' or in broader data science pipelines. While some tools already supported JSON (e.g., &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;), many important and highly demanded modules lacked JSON support, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt; and many more. This lack of consistency limited the seamless adoption of GRASS in analytics and machine learning contexts. Moreover, there was no clear '''documentation of the JSON schema''' or guidance on how to parse and utilize these outputs effectively in '''python or pandas''', which made it difficult for users to understand the use cases and integrate GRASS outputs into modern data science workflows.&lt;br /&gt;
&lt;br /&gt;
== The state of integration AFTER GSoC ==&lt;br /&gt;
&lt;br /&gt;
After GSoC, the integration state of JSON and alternative output formats in GRASS has significantly improved. I refactored the JSON structures for tools such as &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;, and others, removing unnecessary nesting introduced during the previous GSoC. This makes their outputs much easier to consume directly in &amp;lt;b&amp;gt;Python&amp;lt;/b&amp;gt; or with &amp;lt;b&amp;gt;pandas&amp;lt;/b&amp;gt;. In addition, JSON support has been extended to many essential and frequently used modules, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;, and many more. I also added detailed documentation of the JSON schema and provided examples showing how to parse and use these outputs effectively with Python and pandas. Together, these improvements make the adoption of GRASS in modern &amp;lt;b&amp;gt;data science workflows&amp;lt;/b&amp;gt; far more seamless and accessible.&lt;br /&gt;
&lt;br /&gt;
=== Enhancements made per tool ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;: Simplified JSON structure for univariate statistics, removed unnecessary hierarchy, and added new output format options (CSV, shell).&lt;br /&gt;
* &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;: Added JSON support for querying raster map colors, with a Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;: Added JSON support for reporting the current mapset, with a Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;: Updated JSON structure for raster map metadata, removing hierarchy for easier parsing. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;: Simplified JSON output for geographic region boundaries, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;: Added JSON support for GRASS version information, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;: Added JSON support for listing imagery groups, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;: Added JSON and CSV support for raster area statistics, with Python and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;: Refined JSON schema for nearest element queries, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;: Added JSON support for listing GRASS database files, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;: Updated JSON schema for printing vector attribute values, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;: Simplified JSON output, added CSV support, and included a matplotlib example for profile visualization.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;: Updated JSON schema for linear regression between rasters, with Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;: Updated JSON schema for category quantiles, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;: Added JSON support for raster volume calculations, fixed missing headers in CSV output, and provided pandas examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.columns&amp;lt;/code&amp;gt;: Added JSON output for listing database table columns, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;: Added JSON output for measuring lengths and areas, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.connect&amp;lt;/code&amp;gt;: Added JSON output for DB connection info, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.multi&amp;lt;/code&amp;gt;: Added JSON output for multiple regression between rasters, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.db.connect&amp;lt;/code&amp;gt;: Added JSON output for vector map attribute connections, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.findfile&amp;lt;/code&amp;gt;: Added JSON output for GRASS database file search, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;: Added JSON output for 3D raster map info, with Python example. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;: Added JSON output for extracting raster values at vector points, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt;: Added JSON and CSV support for locating closest points between raster objects, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;: Added JSON and CSV support for attribute data, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;: Migrated from manually written JSON to Parson-based JSON output, simplified schema, and provided Python parsing examples.&lt;br /&gt;
&lt;br /&gt;
All these changes were accompanied by regression tests to ensure that new JSON/CSV/SHELL/PLAIN output options do not break existing functionality. Additionally, I introduced comprehensive Python test cases for these outputs, making the enhancements reliable and future-proof. During this work, I also fixed several bugs in modules such as &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;, strengthening the stability of GRASS as a whole.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
To sum up, I’m glad to have met the three core objectives of my project with the constant support of my mentors:&lt;br /&gt;
&lt;br /&gt;
* Brought JSON output to several important and long-requested modules, added regression tests, and ensured reliable future test coverage.&lt;br /&gt;
* Enhanced the JSON schema introduced in last year’s GSoC by reducing unnecessary hierarchy, making it more consistent across tools, and providing Python/Pandas examples for practical use.&lt;br /&gt;
* Expanded &amp;lt;b&amp;gt;CSV&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;SHELL&amp;lt;/b&amp;gt; output formats to additional tools where they could bring value.&lt;br /&gt;
&lt;br /&gt;
This journey has been both rewarding and educational, and I’m grateful for the opportunity to contribute to GRASS through GSoC 2025. I especially want to thank &amp;lt;b&amp;gt;Anna Petrasova&amp;lt;/b&amp;gt; and the GRASS Development Team for their guidance and support. I’m excited to keep building on this work and further extend JSON and other features in the future.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
There is significant scope to extend structured output support across GRASS tools. In particular, future efforts should focus on:&lt;br /&gt;
* Expanding JSON output to additional modules, with details tracked here: [https://github.com/orgs/OSGeo/projects/10 GRASS JSON Outputs Project].&lt;br /&gt;
* Refining and standardizing the JSON schema to better support complex workflows and integrations.&lt;br /&gt;
* Exploring and implementing other output formats (e.g., SHELL, CSV, PLAIN) where they can improve usability and automation.&lt;br /&gt;
I also plan to continue contributing to GRASS by extending JSON support to more modules and engaging in community discussions around schema design and format integration.&lt;br /&gt;
&lt;br /&gt;
== Log of Pull Requests ==&lt;br /&gt;
Below is a list of pull requests submitted to the GRASS repository during GSoC 2025:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pull Request !! Description  !! Date   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5688 #5688] || r.univar: Fix JSON structure || May 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5773 #5773] || r.what.color: Add test file || May 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5775 #5775] || g.mapset: Add test file || May 26, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5784 #5784] || r.info: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;Closed&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5785 #5785] || g.region: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5810 #5810] || g.mapset: Add JSON support || June 2, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5821 #5821] || r.univar: Fix uninitialized zone_value || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5822 #5822] || r.what.color: Add JSON support || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5842 #5842] || r.info: Update test file || June 5, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5859 #5859] || r.info: Improve interface || June 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5863 #5863] || g.version: Add JSON support || June 9, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5870 #5870] || i.group: Add JSON support || June 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5879 #5879] || r.stats: Add test file || June 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5892 #5892] || r.stats: Add tests for JSON output || June 14, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5898 #5898] || v.distance: Update JSON format || June 16, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5900 #5900] || r.stats: fix uninitialised window value || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5906 #5906] || g.list: Add test file || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5921 #5921] || g.list: Add JSON support || June 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5929 #5929] || g.region: Update JSON format || June 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5946 #5946] || v.to.db: Update JSON format || June 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5962 #5962] || r.profile: Update JSON format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5966 #5966] || r.univar: Add shell and CSV format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5990 #5990] || r.regression.line: Add test file || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5993 #5993] || r.regression.line: Add JSON support || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6002 #6002] || r.stats.quantile: Add test file || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6007 #6007] || r.stats.quantile: Add JSON support || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6027 #6027] || r.volume: Add test file || July 4, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6036 #6036] || r.volume: Add JSON support || July 6, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6042 #6042] || db.columns: Add JSON support || July 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6051 #6051] || m.measure: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6052 #6052] || db.connect: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6053 #6053] || m.measure: Add JSON support || July 11, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6059 #6059] || db.connect: Add JSON support || July 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6066 #6066] || r.regression.multi: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6067 #6067] || v.db.connect: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6075 #6075] || r.regression.multi: Add JSON support || July 18, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6077 #6077] || v.db.connect: Add JSON support || July 19, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6091 #6091] || g.findfile: Add JSON support || July 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6098 #6098] || r3.info: Add test file || July 22, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6103 #6103] || r3.info: Add JSON support || July 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6109 #6109] || v.what.rast: Add test file || July 24, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6132 #6132] || v.category: Use CSV format instead of shell format || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6133 #6133] || r.stats: add CSV support || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6134 #6134] || r.volume: add csv column headers || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6140 #6140] || v.what.rast: Add JSON support || July 29, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6145 #6145] || r.profile: Add CSV support || July 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6150 #6150] || r.distance: Update existing test cases || August 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6204 #6204] || r.distance: Add JSON and CSV support || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6205 #6205] || v.class: Add more test cases and fix out-of-bounds bug || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6210 #6210] || v.class: Add JSON and CSV support || August 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6252 #6252] || v.what: Update JSON output format || August 23, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Ttile&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| OSGeo Wiki Page&lt;br /&gt;
| [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C Add JSON output to different tools in C for GRASS]&lt;br /&gt;
|-&lt;br /&gt;
| Github Fork&lt;br /&gt;
| [https://github.com/NishantBansal2003/grass GitHub Fork]&lt;br /&gt;
|-&lt;br /&gt;
| GSoC Page&lt;br /&gt;
| [https://summerofcode.withgoogle.com/programs/2025/projects/GPVGd3DH Link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples &amp;amp; Images ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{GSoC}}&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28659</id>
		<title>GRASS GSoC 2025 Add JSON output to different tools in C</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28659"/>
		<updated>2025-08-24T05:50:25Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: /* Conclusion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Nishant Bansal&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo - Open Source Geospatial Foundation]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/NishantBansal2003/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''GSoC proposal''' || [https://docs.google.com/document/d/1ZPQ9RXU7b_RUDmBmAMeK7ZjFAV1WC7Urd1Zlz678jyw/edit?tab=t.0#heading=h.z6ne0og04bp5 View Proposal]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Abstract =&lt;br /&gt;
Currently, most GRASS tools produce data in plain text by default. This means that users who want to process the output in Python need to create custom parsing code. To make this easier, several modules could be improved by oﬀering JSON as an alternative output format. Recently, the Parson library was added to the GRASS codebase to support JSON output in addition to plain text. Building on the advancements made during the last GSoC, my project aims to expand JSON output capabilities to more tools using the Parson library. I will also work on making the JSON structure introduced in the previous GSoC more useful and consistent. Additionally, I plan to add support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
&lt;br /&gt;
# Working with mentors to finalize the structure of the JSON output.&lt;br /&gt;
# Adding an option to choose the output format (plain text or JSON) for each updated tool.&lt;br /&gt;
# Make the JSON structure introduced during the last GSoC more useful and consistent across tools.&lt;br /&gt;
# Developing Python test cases to ensure that the JSON output works correctly and to avoid future issues.&lt;br /&gt;
# Providing basic documentation and example JSON outputs for each modified tool.&lt;br /&gt;
# Adding support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
# Develop simple examples demonstrating how to use JSON output in a data science workflow, such as reading JSON data into pandas or python.&lt;br /&gt;
&lt;br /&gt;
= Timeline =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Period !! Timeline  !! Tasks   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period &lt;br /&gt;
||&lt;br /&gt;
May 8 - June 1  &lt;br /&gt;
|| &lt;br /&gt;
# Reviewed the work done during the last GSoC to stabilize the JSON output.&lt;br /&gt;
# Discussed the priority tools for adding JSON support.&lt;br /&gt;
# Read GRASS documentation to add Python and JSON examples to the documentation.&lt;br /&gt;
|| &lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;13&amp;quot; | Official Coding Period &lt;br /&gt;
|-&lt;br /&gt;
| '''Week 1''' (June 2 - June 8) || &lt;br /&gt;
# Add JSON support for g.mapset [https://github.com/OSGeo/grass/pull/5810 #5810]&lt;br /&gt;
# Fix uninitialized zone_value in r.univar [https://github.com/OSGeo/grass/pull/5821 #5821]&lt;br /&gt;
# Add JSON support for r.what.color [https://github.com/OSGeo/grass/pull/5822 #5822]&lt;br /&gt;
# Update test file in r.info [https://github.com/OSGeo/grass/pull/5842 #5842]&lt;br /&gt;
# Improve interface for r.info [https://github.com/OSGeo/grass/pull/5859 #5859]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 2''' (June 9 - June 15) ||&lt;br /&gt;
# Add JSON support for g.version [https://github.com/OSGeo/grass/pull/5863 #5863]&lt;br /&gt;
# Add JSON support for i.group [https://github.com/OSGeo/grass/pull/5870 #5870]&lt;br /&gt;
# Add test file in r.stats [https://github.com/OSGeo/grass/pull/5879 #5879]&lt;br /&gt;
# Add tests for JSON output in r.stats [https://github.com/OSGeo/grass/pull/5892 #5892]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 3''' (June 16 - June 22) ||&lt;br /&gt;
# Update the JSON output schema of v.distance [https://github.com/OSGeo/grass/pull/5898 #5898]&lt;br /&gt;
# Fix uninitialized window variable in r.stats [https://github.com/OSGeo/grass/pull/5900 #5900]&lt;br /&gt;
# Add test file in g.list [https://github.com/OSGeo/grass/pull/5906 #5906]&lt;br /&gt;
# Add JSON support for g.list [https://github.com/OSGeo/grass/pull/5921 #5921]&lt;br /&gt;
# Update the JSON output schema of g.region [https://github.com/OSGeo/grass/pull/5929 #5929]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 4''' (June 23 - June 29) ||&lt;br /&gt;
# Update the JSON output schema of v.to.db [https://github.com/OSGeo/grass/pull/5946 #5946]&lt;br /&gt;
# Update the JSON output schema of r.profile [https://github.com/OSGeo/grass/pull/5962 #5962]&lt;br /&gt;
# Add SHELL and CSV output support for r.univar [https://github.com/OSGeo/grass/pull/5966 #5966]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 5''' (June 30 - July 6) ||&lt;br /&gt;
# Add test file in r.regression.line [https://github.com/OSGeo/grass/pull/5990 #5990]&lt;br /&gt;
# Add JSON support for r.regression.line [https://github.com/OSGeo/grass/pull/5993 #5993]&lt;br /&gt;
# Add test file in r.stats.quantile [https://github.com/OSGeo/grass/pull/6002 #6002]&lt;br /&gt;
# Add JSON support for r.stats.quantile [https://github.com/OSGeo/grass/pull/6007 #6007]&lt;br /&gt;
# Add test file in r.volume [https://github.com/OSGeo/grass/pull/6027 #6027]&lt;br /&gt;
# Add JSON support for r.volume [https://github.com/OSGeo/grass/pull/6036 #6036]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 6''' (July 7 - July 13) ||&lt;br /&gt;
# Add JSON support for db.columns [https://github.com/OSGeo/grass/pull/6042 #6042]&lt;br /&gt;
# Add test file in m.measure [https://github.com/OSGeo/grass/pull/6051 #6051]&lt;br /&gt;
# Add test file in db.connect [https://github.com/OSGeo/grass/pull/6052 #6052]&lt;br /&gt;
# Add JSON support for m.measure [https://github.com/OSGeo/grass/pull/6053 #6053]&lt;br /&gt;
# Add JSON support for db.connect [https://github.com/OSGeo/grass/pull/6059 #6059]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 7''' (July 14 - July 20) ||&lt;br /&gt;
# Add test file in r.regression.multi [https://github.com/OSGeo/grass/pull/6066 #6066]&lt;br /&gt;
# Add test file in v.db.connect [https://github.com/OSGeo/grass/pull/6067 #6067]&lt;br /&gt;
# Add JSON support for r.regression.multi [https://github.com/OSGeo/grass/pull/6075 #6075]&lt;br /&gt;
# Add JSON support for v.db.connect [https://github.com/OSGeo/grass/pull/6077 #6077]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 8''' (July 21 - July 27) ||&lt;br /&gt;
# Add JSON support for g.findfile [https://github.com/OSGeo/grass/pull/6091 #6091]&lt;br /&gt;
# Add test file in r3.info [https://github.com/OSGeo/grass/pull/6098 #6098]&lt;br /&gt;
# Add JSON support for r3.info [https://github.com/OSGeo/grass/pull/6103 #6103]&lt;br /&gt;
# Add test file in v.what.rast [https://github.com/OSGeo/grass/pull/6109 #6109]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 9''' (July 28 - August 3) ||&lt;br /&gt;
# Update format to CSV instead of shell in v.category [https://github.com/OSGeo/grass/pull/6132 #6132]&lt;br /&gt;
# Add CSV output support to r.stats [https://github.com/OSGeo/grass/pull/6133 #6133]&lt;br /&gt;
# Add CSV headers to r.volume [https://github.com/OSGeo/grass/pull/6134 #6134]&lt;br /&gt;
# Add JSON support for v.what.rast [https://github.com/OSGeo/grass/pull/6140 #6140]&lt;br /&gt;
# Add CSV output support to r.profile [https://github.com/OSGeo/grass/pull/6145 #6145]&lt;br /&gt;
# Update test cases in r.distance [https://github.com/OSGeo/grass/pull/6150 #6150]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 10''' (August 4 - August 10) ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 11''' (August 11 - August 17) ||&lt;br /&gt;
# Add JSON and CSV support for r.distance [https://github.com/OSGeo/grass/pull/6204 #6204]&lt;br /&gt;
# Add more test cases in v.class [https://github.com/OSGeo/grass/pull/6205 #6205]&lt;br /&gt;
# Add JSON and CSV support for v.class [https://github.com/OSGeo/grass/pull/6210 #6210]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 12''' (August 18 - August 24) ||&lt;br /&gt;
# Update JSON output format for v.what [https://github.com/OSGeo/grass/pull/6252 #6252]&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Evaluation Period &lt;br /&gt;
|-&lt;br /&gt;
| August 25 - September 1 ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
# Submit code, final evaluation and write the final GSoC report.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Reports =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* Introduced myself on the [https://discourse.osgeo.org/t/gsoc-2025-introduction-nishant-bansal/147005 OSGeo Discourse mailing list].&lt;br /&gt;
* Created both my [https://wiki.osgeo.org/wiki/User:Nishantbansal2003 personal Wiki page] and the [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C project Wiki page], adding all necessary project-related information.&lt;br /&gt;
* Read GRASS documentation to support the addition of Python and JSON examples.&lt;br /&gt;
* Worked on the following pull requests:&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5688 #5688]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5773 #5773]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5775 #5775]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5784 #5784]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5785 #5785]&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to the g.mapset and r.what.color modules.&lt;br /&gt;
* If time permits, I will begin improving the r.info interface: [https://github.com/OSGeo/grass/issues/5793 Issue #5793]&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
'''Project Discussions and Meetings'''&lt;br /&gt;
* '''14 May 2025''': Introductory meeting discussing JSON support and overall project milestones.&lt;br /&gt;
* '''21 May 2025''': Introduction with fellow developers. Discussed priority tools, adding Python/Pandas examples, and approaches for finalizing the JSON schema for each module.&lt;br /&gt;
&lt;br /&gt;
== Week-1 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.mapset''': Added JSON output support, now you can use -p and -l flags to get JSON-formatted results.&lt;br /&gt;
* '''r.univar''': Fixed a bug causing an uninitialized zone_value.&lt;br /&gt;
* '''r.what.color''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5822 #5822])&lt;br /&gt;
* '''r.info (regression tests)''': To maintain backward compatibility while updating its interface, I added strong regression tests.&lt;br /&gt;
* '''r.info (interface improvements)''': Began improving the module’s interface. (See PR [https://github.com/OSGeo/grass/pull/5859 #5859])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.version (see issue [https://github.com/OSGeo/grass/issues/5816 #5816]).&lt;br /&gt;
* Add JSON output support to i.group (see issue [https://github.com/OSGeo/grass/issues/5815 #5815]).&lt;br /&gt;
* If time permits, write tests for r.stats (see issue [https://github.com/OSGeo/grass/issues/5814 #5814]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-2 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.version''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5863 #5863])&lt;br /&gt;
* '''i.group''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5870 #5870])&lt;br /&gt;
* '''r.stats (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats''': Added tests for JSON output; this uncovered a bug, which was fixed alongside.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.distance (see issue [https://github.com/OSGeo/grass/issues/5846 #5846]).&lt;br /&gt;
* Add JSON output support to g.list (see issue [https://github.com/OSGeo/grass/issues/5848 #5848]).&lt;br /&gt;
* If time permits, fix the JSON output format of g.region (see issue [https://github.com/OSGeo/grass/issues/5828 #5828]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-3 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.distance''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5898 #5898])&lt;br /&gt;
* '''r.stats''': Fixed a bug causing an uninitialized &amp;lt;code&amp;gt;window&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
* '''g.list (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''g.list''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5921 #5921])&lt;br /&gt;
* '''g.region''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5929 #5929])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.to.db (see issue [https://github.com/OSGeo/grass/pull/5711 #5711]).&lt;br /&gt;
* Update JSON output format and documentation of r.profile (see issue [https://github.com/OSGeo/grass/pull/5834 #5834]).&lt;br /&gt;
* If time permits, add shell and csv output formats to r.univar (see issue [https://github.com/OSGeo/grass/pull/5824 #5824]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-4 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.to.db''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5946 #5946])&lt;br /&gt;
* '''r.profile''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5962 #5962])&lt;br /&gt;
* '''r.univar''': Implemented SHELL and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/5966 #5966])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.regression.line (see issue [https://github.com/OSGeo/grass/pull/5950 #5950]).&lt;br /&gt;
* Add JSON output support to r.stats.quantile (see issue [https://github.com/OSGeo/grass/pull/5951 #5951]).&lt;br /&gt;
* Add JSON output support to r.volume (see issue [https://github.com/OSGeo/grass/pull/5949 #5949]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-5 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.line (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.line''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5993 #5993])&lt;br /&gt;
* '''r.stats.quantile (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats.quantile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6007 #6007])&lt;br /&gt;
* '''r.volume (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.volume''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6036 #6036])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to m.measure (see issue [https://github.com/OSGeo/grass/pull/6006 #6006]).&lt;br /&gt;
* Add JSON output support to db.columns (see issue [https://github.com/OSGeo/grass/pull/6008 #6008]).&lt;br /&gt;
* Add JSON output support to db.connect (see issue [https://github.com/OSGeo/grass/pull/6009 #6009]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-6 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''db.columns''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6042 #6042])&lt;br /&gt;
* '''m.measure (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''m.measure''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6053 #6053])&lt;br /&gt;
* '''db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6059 #6059])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to v.db.connect (see issue [https://github.com/OSGeo/grass/pull/6014 #6014]).&lt;br /&gt;
* Add JSON output support to r.regression.multi (see issue [https://github.com/OSGeo/grass/pull/6010 #6010]).&lt;br /&gt;
* If time permits, add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* If time permits, add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-7 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.multi (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''v.db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.multi''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6075 #6075])&lt;br /&gt;
* '''v.db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6077 #6077])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* Add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
* If time permits, add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-8 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.findfile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6091 #6091])&lt;br /&gt;
* '''r3.info (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a flag-handling bug.&lt;br /&gt;
* '''r3.info''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6103 #6103])&lt;br /&gt;
* '''v.what.rast (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a sorting bug.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
* Update format to CSV instead of shell in v.category (see issue [https://github.com/OSGeo/grass/pull/6025 #6025]).&lt;br /&gt;
* Add CSV output support to r.stats (see issue [https://github.com/OSGeo/grass/issues/5835 #5835]).&lt;br /&gt;
* If time permits, add CSV output support to r.profile (see issue [https://github.com/OSGeo/grass/issues/5958 #5958]).&lt;br /&gt;
* If time permits, add CSV headers to r.volume (see issue [https://github.com/OSGeo/grass/issues/6049 #6049]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I don’t have any blockers this week. However, I’ll be a little busy with some personal work from August 3 to August 10, so I’ll try to complete next week’s tasks this week itself.&lt;br /&gt;
&lt;br /&gt;
== Week-9 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.category''': Updated format to CSV instead of shell. (See PR [https://github.com/OSGeo/grass/pull/6132 #6132])&lt;br /&gt;
* '''r.stats''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6133 #6133])&lt;br /&gt;
* '''r.volume''': Implemented CSV column headers support. (See PR [https://github.com/OSGeo/grass/pull/6134 #6134])&lt;br /&gt;
* '''v.what.rast''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6140 #6140])&lt;br /&gt;
* '''r.profile''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6145 #6145])&lt;br /&gt;
* '''r.distance (regression tests)''': Updated regression tests to ensure backward compatibility with new JSON support. (See PR [https://github.com/OSGeo/grass/pull/6150 #6150])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* I’ll be a bit busy with some personal work from August 3 to 10, so I completed next week’s tasks last week itself. I’ve already informed my mentors about my limited availability.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* Yes, I’ll be a bit busy with some personal work from August 3 to 10.&lt;br /&gt;
&lt;br /&gt;
== Week-10 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* This week I was busy with some personal work, so I did not complete any additional tasks. However, I had already finished this week’s tasks last week. This week, I mostly focused on handling reviews for those PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.distance (see issue [https://github.com/OSGeo/grass/issues/6135 #6135]).&lt;br /&gt;
* Add JSON output support to v.class (see issue [https://github.com/OSGeo/grass/issues/6136 #6136]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-11 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.distance''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6204 #6204])&lt;br /&gt;
* '''v.class''': Updated regression tests to ensure backward compatibility with new JSON support and fixed a out-of-bounds bug. (See PR [https://github.com/OSGeo/grass/pull/6205 #6205])&lt;br /&gt;
* '''v.class''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6210 #6210])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Discuss next week’s tasks with my mentors, if no issues are assigned, I’ll identify tools that currently lack JSON support and evaluate which ones are feasible to add it to.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-12 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.what''': Update JSON output format. (See PR [https://github.com/OSGeo/grass/pull/6252 #6252])&lt;br /&gt;
* Addressed review comments on my open PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
= Final Report =&lt;br /&gt;
&lt;br /&gt;
== Title ==&lt;br /&gt;
Add JSON output to different tools in C for GRASS&lt;br /&gt;
&lt;br /&gt;
== Organization ==&lt;br /&gt;
OSGeo (Open Source Geospatial Foundation)&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
During my GSoC project, I addressed the challenge that most GRASS tools produced only plain text output, forcing users to write custom parsing code for Python-based workflows. The task was to make these tools more data-science friendly by adding structured output formats. To achieve this, I extended the use of the Parson library to implement consistent JSON output across multiple modules, refined the JSON structure introduced in the previous GSoC, and added optional support for SHELL and CSV outputs where appropriate. I developed comprehensive Python test cases, ensured backward compatibility, and provided documentation with practical examples such as loading JSON into pandas. As a result, GRASS users can now directly consume structured outputs in modern workflows, reducing parsing overhead, improving interoperability, and paving the way for broader adoption of GRASS in data science contexts.&lt;br /&gt;
&lt;br /&gt;
== The state of integration BEFORE the start of GSoC ==&lt;br /&gt;
Before the start of GSoC, the integration of GRASS with data science workflows was limited due to several challenges. The JSON outputs introduced in the previous GSoC contained deeply nested hierarchies, making them difficult to use directly with libraries such as '''pandas''' or in broader data science pipelines. While some tools already supported JSON (e.g., &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;), many important and highly demanded modules lacked JSON support, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt; and many more. This lack of consistency limited the seamless adoption of GRASS in analytics and machine learning contexts. Moreover, there was no clear '''documentation of the JSON schema''' or guidance on how to parse and utilize these outputs effectively in '''python or pandas''', which made it difficult for users to understand the use cases and integrate GRASS outputs into modern data science workflows.&lt;br /&gt;
&lt;br /&gt;
== The state of integration AFTER GSoC ==&lt;br /&gt;
&lt;br /&gt;
After GSoC, the integration state of JSON and alternative output formats in GRASS has significantly improved. I refactored the JSON structures for tools such as &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;, and others, removing unnecessary nesting introduced during the previous GSoC. This makes their outputs much easier to consume directly in &amp;lt;b&amp;gt;Python&amp;lt;/b&amp;gt; or with &amp;lt;b&amp;gt;pandas&amp;lt;/b&amp;gt;. In addition, JSON support has been extended to many essential and frequently used modules, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;, and many more. I also added detailed documentation of the JSON schema and provided examples showing how to parse and use these outputs effectively with Python and pandas. Together, these improvements make the adoption of GRASS in modern &amp;lt;b&amp;gt;data science workflows&amp;lt;/b&amp;gt; far more seamless and accessible.&lt;br /&gt;
&lt;br /&gt;
=== Enhancements made per tool ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;: Simplified JSON structure for univariate statistics, removed unnecessary hierarchy, and added new output format options (CSV, shell).&lt;br /&gt;
* &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;: Added JSON support for querying raster map colors, with a Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;: Added JSON support for reporting the current mapset, with a Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;: Updated JSON structure for raster map metadata, removing hierarchy for easier parsing. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;: Simplified JSON output for geographic region boundaries, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;: Added JSON support for GRASS version information, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;: Added JSON support for listing imagery groups, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;: Added JSON and CSV support for raster area statistics, with Python and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;: Refined JSON schema for nearest element queries, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;: Added JSON support for listing GRASS database files, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;: Updated JSON schema for printing vector attribute values, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;: Simplified JSON output, added CSV support, and included a matplotlib example for profile visualization.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;: Updated JSON schema for linear regression between rasters, with Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;: Updated JSON schema for category quantiles, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;: Added JSON support for raster volume calculations, fixed missing headers in CSV output, and provided pandas examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.columns&amp;lt;/code&amp;gt;: Added JSON output for listing database table columns, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;: Added JSON output for measuring lengths and areas, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.connect&amp;lt;/code&amp;gt;: Added JSON output for DB connection info, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.multi&amp;lt;/code&amp;gt;: Added JSON output for multiple regression between rasters, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.db.connect&amp;lt;/code&amp;gt;: Added JSON output for vector map attribute connections, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.findfile&amp;lt;/code&amp;gt;: Added JSON output for GRASS database file search, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;: Added JSON output for 3D raster map info, with Python example. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;: Added JSON output for extracting raster values at vector points, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt;: Added JSON and CSV support for locating closest points between raster objects, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;: Added JSON and CSV support for attribute data, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;: Migrated from manually written JSON to Parson-based JSON output, simplified schema, and provided Python parsing examples.&lt;br /&gt;
&lt;br /&gt;
All these changes were accompanied by regression tests to ensure that new JSON/CSV/SHELL/PLAIN output options do not break existing functionality. Additionally, I introduced comprehensive Python test cases for these outputs, making the enhancements reliable and future-proof. During this work, I also fixed several bugs in modules such as &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;, strengthening the stability of GRASS as a whole.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
To sum up, I’m glad to have met the three core objectives of my project with the constant support of my mentors:&lt;br /&gt;
&lt;br /&gt;
* Brought JSON output to several important and long-requested modules, added regression tests, and ensured reliable future test coverage.&lt;br /&gt;
* Enhanced the JSON schema introduced in last year’s GSoC by reducing unnecessary hierarchy, making it more consistent across tools, and providing Python/Pandas examples for practical use.&lt;br /&gt;
* Expanded &amp;lt;b&amp;gt;CSV&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;SHELL&amp;lt;/b&amp;gt; output formats to additional tools where they could bring value.&lt;br /&gt;
&lt;br /&gt;
This journey has been both rewarding and educational, and I’m grateful for the opportunity to contribute to GRASS through GSoC 2025. I especially want to thank &amp;lt;b&amp;gt;Anna Petrasova&amp;lt;/b&amp;gt; and the GRASS Development Team for their guidance and support. I’m excited to keep building on this work and further extend JSON and other features in the future.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
&lt;br /&gt;
== Log of Pull Requests ==&lt;br /&gt;
Below is a list of pull requests submitted to the GRASS repository during GSoC 2025:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pull Request !! Description  !! Date   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5688 #5688] || r.univar: Fix JSON structure || May 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5773 #5773] || r.what.color: Add test file || May 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5775 #5775] || g.mapset: Add test file || May 26, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5784 #5784] || r.info: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;Closed&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5785 #5785] || g.region: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5810 #5810] || g.mapset: Add JSON support || June 2, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5821 #5821] || r.univar: Fix uninitialized zone_value || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5822 #5822] || r.what.color: Add JSON support || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5842 #5842] || r.info: Update test file || June 5, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5859 #5859] || r.info: Improve interface || June 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5863 #5863] || g.version: Add JSON support || June 9, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5870 #5870] || i.group: Add JSON support || June 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5879 #5879] || r.stats: Add test file || June 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5892 #5892] || r.stats: Add tests for JSON output || June 14, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5898 #5898] || v.distance: Update JSON format || June 16, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5900 #5900] || r.stats: fix uninitialised window value || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5906 #5906] || g.list: Add test file || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5921 #5921] || g.list: Add JSON support || June 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5929 #5929] || g.region: Update JSON format || June 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5946 #5946] || v.to.db: Update JSON format || June 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5962 #5962] || r.profile: Update JSON format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5966 #5966] || r.univar: Add shell and CSV format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5990 #5990] || r.regression.line: Add test file || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5993 #5993] || r.regression.line: Add JSON support || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6002 #6002] || r.stats.quantile: Add test file || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6007 #6007] || r.stats.quantile: Add JSON support || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6027 #6027] || r.volume: Add test file || July 4, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6036 #6036] || r.volume: Add JSON support || July 6, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6042 #6042] || db.columns: Add JSON support || July 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6051 #6051] || m.measure: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6052 #6052] || db.connect: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6053 #6053] || m.measure: Add JSON support || July 11, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6059 #6059] || db.connect: Add JSON support || July 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6066 #6066] || r.regression.multi: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6067 #6067] || v.db.connect: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6075 #6075] || r.regression.multi: Add JSON support || July 18, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6077 #6077] || v.db.connect: Add JSON support || July 19, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6091 #6091] || g.findfile: Add JSON support || July 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6098 #6098] || r3.info: Add test file || July 22, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6103 #6103] || r3.info: Add JSON support || July 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6109 #6109] || v.what.rast: Add test file || July 24, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6132 #6132] || v.category: Use CSV format instead of shell format || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6133 #6133] || r.stats: add CSV support || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6134 #6134] || r.volume: add csv column headers || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6140 #6140] || v.what.rast: Add JSON support || July 29, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6145 #6145] || r.profile: Add CSV support || July 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6150 #6150] || r.distance: Update existing test cases || August 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6204 #6204] || r.distance: Add JSON and CSV support || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6205 #6205] || v.class: Add more test cases and fix out-of-bounds bug || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6210 #6210] || v.class: Add JSON and CSV support || August 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6252 #6252] || v.what: Update JSON output format || August 23, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Ttile&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| OSGeo Wiki Page&lt;br /&gt;
| [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C Add JSON output to different tools in C for GRASS]&lt;br /&gt;
|-&lt;br /&gt;
| Github Fork&lt;br /&gt;
| [https://github.com/NishantBansal2003/grass GitHub Fork]&lt;br /&gt;
|-&lt;br /&gt;
| GSoC Page&lt;br /&gt;
| [https://summerofcode.withgoogle.com/programs/2025/projects/GPVGd3DH Link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples &amp;amp; Images ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{GSoC}}&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28658</id>
		<title>GRASS GSoC 2025 Add JSON output to different tools in C</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28658"/>
		<updated>2025-08-24T05:38:24Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: /* Log of Pull Requests */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Nishant Bansal&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo - Open Source Geospatial Foundation]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/NishantBansal2003/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''GSoC proposal''' || [https://docs.google.com/document/d/1ZPQ9RXU7b_RUDmBmAMeK7ZjFAV1WC7Urd1Zlz678jyw/edit?tab=t.0#heading=h.z6ne0og04bp5 View Proposal]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Abstract =&lt;br /&gt;
Currently, most GRASS tools produce data in plain text by default. This means that users who want to process the output in Python need to create custom parsing code. To make this easier, several modules could be improved by oﬀering JSON as an alternative output format. Recently, the Parson library was added to the GRASS codebase to support JSON output in addition to plain text. Building on the advancements made during the last GSoC, my project aims to expand JSON output capabilities to more tools using the Parson library. I will also work on making the JSON structure introduced in the previous GSoC more useful and consistent. Additionally, I plan to add support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
&lt;br /&gt;
# Working with mentors to finalize the structure of the JSON output.&lt;br /&gt;
# Adding an option to choose the output format (plain text or JSON) for each updated tool.&lt;br /&gt;
# Make the JSON structure introduced during the last GSoC more useful and consistent across tools.&lt;br /&gt;
# Developing Python test cases to ensure that the JSON output works correctly and to avoid future issues.&lt;br /&gt;
# Providing basic documentation and example JSON outputs for each modified tool.&lt;br /&gt;
# Adding support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
# Develop simple examples demonstrating how to use JSON output in a data science workflow, such as reading JSON data into pandas or python.&lt;br /&gt;
&lt;br /&gt;
= Timeline =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Period !! Timeline  !! Tasks   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period &lt;br /&gt;
||&lt;br /&gt;
May 8 - June 1  &lt;br /&gt;
|| &lt;br /&gt;
# Reviewed the work done during the last GSoC to stabilize the JSON output.&lt;br /&gt;
# Discussed the priority tools for adding JSON support.&lt;br /&gt;
# Read GRASS documentation to add Python and JSON examples to the documentation.&lt;br /&gt;
|| &lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;13&amp;quot; | Official Coding Period &lt;br /&gt;
|-&lt;br /&gt;
| '''Week 1''' (June 2 - June 8) || &lt;br /&gt;
# Add JSON support for g.mapset [https://github.com/OSGeo/grass/pull/5810 #5810]&lt;br /&gt;
# Fix uninitialized zone_value in r.univar [https://github.com/OSGeo/grass/pull/5821 #5821]&lt;br /&gt;
# Add JSON support for r.what.color [https://github.com/OSGeo/grass/pull/5822 #5822]&lt;br /&gt;
# Update test file in r.info [https://github.com/OSGeo/grass/pull/5842 #5842]&lt;br /&gt;
# Improve interface for r.info [https://github.com/OSGeo/grass/pull/5859 #5859]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 2''' (June 9 - June 15) ||&lt;br /&gt;
# Add JSON support for g.version [https://github.com/OSGeo/grass/pull/5863 #5863]&lt;br /&gt;
# Add JSON support for i.group [https://github.com/OSGeo/grass/pull/5870 #5870]&lt;br /&gt;
# Add test file in r.stats [https://github.com/OSGeo/grass/pull/5879 #5879]&lt;br /&gt;
# Add tests for JSON output in r.stats [https://github.com/OSGeo/grass/pull/5892 #5892]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 3''' (June 16 - June 22) ||&lt;br /&gt;
# Update the JSON output schema of v.distance [https://github.com/OSGeo/grass/pull/5898 #5898]&lt;br /&gt;
# Fix uninitialized window variable in r.stats [https://github.com/OSGeo/grass/pull/5900 #5900]&lt;br /&gt;
# Add test file in g.list [https://github.com/OSGeo/grass/pull/5906 #5906]&lt;br /&gt;
# Add JSON support for g.list [https://github.com/OSGeo/grass/pull/5921 #5921]&lt;br /&gt;
# Update the JSON output schema of g.region [https://github.com/OSGeo/grass/pull/5929 #5929]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 4''' (June 23 - June 29) ||&lt;br /&gt;
# Update the JSON output schema of v.to.db [https://github.com/OSGeo/grass/pull/5946 #5946]&lt;br /&gt;
# Update the JSON output schema of r.profile [https://github.com/OSGeo/grass/pull/5962 #5962]&lt;br /&gt;
# Add SHELL and CSV output support for r.univar [https://github.com/OSGeo/grass/pull/5966 #5966]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 5''' (June 30 - July 6) ||&lt;br /&gt;
# Add test file in r.regression.line [https://github.com/OSGeo/grass/pull/5990 #5990]&lt;br /&gt;
# Add JSON support for r.regression.line [https://github.com/OSGeo/grass/pull/5993 #5993]&lt;br /&gt;
# Add test file in r.stats.quantile [https://github.com/OSGeo/grass/pull/6002 #6002]&lt;br /&gt;
# Add JSON support for r.stats.quantile [https://github.com/OSGeo/grass/pull/6007 #6007]&lt;br /&gt;
# Add test file in r.volume [https://github.com/OSGeo/grass/pull/6027 #6027]&lt;br /&gt;
# Add JSON support for r.volume [https://github.com/OSGeo/grass/pull/6036 #6036]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 6''' (July 7 - July 13) ||&lt;br /&gt;
# Add JSON support for db.columns [https://github.com/OSGeo/grass/pull/6042 #6042]&lt;br /&gt;
# Add test file in m.measure [https://github.com/OSGeo/grass/pull/6051 #6051]&lt;br /&gt;
# Add test file in db.connect [https://github.com/OSGeo/grass/pull/6052 #6052]&lt;br /&gt;
# Add JSON support for m.measure [https://github.com/OSGeo/grass/pull/6053 #6053]&lt;br /&gt;
# Add JSON support for db.connect [https://github.com/OSGeo/grass/pull/6059 #6059]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 7''' (July 14 - July 20) ||&lt;br /&gt;
# Add test file in r.regression.multi [https://github.com/OSGeo/grass/pull/6066 #6066]&lt;br /&gt;
# Add test file in v.db.connect [https://github.com/OSGeo/grass/pull/6067 #6067]&lt;br /&gt;
# Add JSON support for r.regression.multi [https://github.com/OSGeo/grass/pull/6075 #6075]&lt;br /&gt;
# Add JSON support for v.db.connect [https://github.com/OSGeo/grass/pull/6077 #6077]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 8''' (July 21 - July 27) ||&lt;br /&gt;
# Add JSON support for g.findfile [https://github.com/OSGeo/grass/pull/6091 #6091]&lt;br /&gt;
# Add test file in r3.info [https://github.com/OSGeo/grass/pull/6098 #6098]&lt;br /&gt;
# Add JSON support for r3.info [https://github.com/OSGeo/grass/pull/6103 #6103]&lt;br /&gt;
# Add test file in v.what.rast [https://github.com/OSGeo/grass/pull/6109 #6109]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 9''' (July 28 - August 3) ||&lt;br /&gt;
# Update format to CSV instead of shell in v.category [https://github.com/OSGeo/grass/pull/6132 #6132]&lt;br /&gt;
# Add CSV output support to r.stats [https://github.com/OSGeo/grass/pull/6133 #6133]&lt;br /&gt;
# Add CSV headers to r.volume [https://github.com/OSGeo/grass/pull/6134 #6134]&lt;br /&gt;
# Add JSON support for v.what.rast [https://github.com/OSGeo/grass/pull/6140 #6140]&lt;br /&gt;
# Add CSV output support to r.profile [https://github.com/OSGeo/grass/pull/6145 #6145]&lt;br /&gt;
# Update test cases in r.distance [https://github.com/OSGeo/grass/pull/6150 #6150]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 10''' (August 4 - August 10) ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 11''' (August 11 - August 17) ||&lt;br /&gt;
# Add JSON and CSV support for r.distance [https://github.com/OSGeo/grass/pull/6204 #6204]&lt;br /&gt;
# Add more test cases in v.class [https://github.com/OSGeo/grass/pull/6205 #6205]&lt;br /&gt;
# Add JSON and CSV support for v.class [https://github.com/OSGeo/grass/pull/6210 #6210]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 12''' (August 18 - August 24) ||&lt;br /&gt;
# Update JSON output format for v.what [https://github.com/OSGeo/grass/pull/6252 #6252]&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Evaluation Period &lt;br /&gt;
|-&lt;br /&gt;
| August 25 - September 1 ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
# Submit code, final evaluation and write the final GSoC report.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Reports =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* Introduced myself on the [https://discourse.osgeo.org/t/gsoc-2025-introduction-nishant-bansal/147005 OSGeo Discourse mailing list].&lt;br /&gt;
* Created both my [https://wiki.osgeo.org/wiki/User:Nishantbansal2003 personal Wiki page] and the [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C project Wiki page], adding all necessary project-related information.&lt;br /&gt;
* Read GRASS documentation to support the addition of Python and JSON examples.&lt;br /&gt;
* Worked on the following pull requests:&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5688 #5688]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5773 #5773]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5775 #5775]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5784 #5784]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5785 #5785]&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to the g.mapset and r.what.color modules.&lt;br /&gt;
* If time permits, I will begin improving the r.info interface: [https://github.com/OSGeo/grass/issues/5793 Issue #5793]&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
'''Project Discussions and Meetings'''&lt;br /&gt;
* '''14 May 2025''': Introductory meeting discussing JSON support and overall project milestones.&lt;br /&gt;
* '''21 May 2025''': Introduction with fellow developers. Discussed priority tools, adding Python/Pandas examples, and approaches for finalizing the JSON schema for each module.&lt;br /&gt;
&lt;br /&gt;
== Week-1 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.mapset''': Added JSON output support, now you can use -p and -l flags to get JSON-formatted results.&lt;br /&gt;
* '''r.univar''': Fixed a bug causing an uninitialized zone_value.&lt;br /&gt;
* '''r.what.color''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5822 #5822])&lt;br /&gt;
* '''r.info (regression tests)''': To maintain backward compatibility while updating its interface, I added strong regression tests.&lt;br /&gt;
* '''r.info (interface improvements)''': Began improving the module’s interface. (See PR [https://github.com/OSGeo/grass/pull/5859 #5859])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.version (see issue [https://github.com/OSGeo/grass/issues/5816 #5816]).&lt;br /&gt;
* Add JSON output support to i.group (see issue [https://github.com/OSGeo/grass/issues/5815 #5815]).&lt;br /&gt;
* If time permits, write tests for r.stats (see issue [https://github.com/OSGeo/grass/issues/5814 #5814]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-2 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.version''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5863 #5863])&lt;br /&gt;
* '''i.group''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5870 #5870])&lt;br /&gt;
* '''r.stats (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats''': Added tests for JSON output; this uncovered a bug, which was fixed alongside.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.distance (see issue [https://github.com/OSGeo/grass/issues/5846 #5846]).&lt;br /&gt;
* Add JSON output support to g.list (see issue [https://github.com/OSGeo/grass/issues/5848 #5848]).&lt;br /&gt;
* If time permits, fix the JSON output format of g.region (see issue [https://github.com/OSGeo/grass/issues/5828 #5828]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-3 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.distance''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5898 #5898])&lt;br /&gt;
* '''r.stats''': Fixed a bug causing an uninitialized &amp;lt;code&amp;gt;window&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
* '''g.list (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''g.list''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5921 #5921])&lt;br /&gt;
* '''g.region''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5929 #5929])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.to.db (see issue [https://github.com/OSGeo/grass/pull/5711 #5711]).&lt;br /&gt;
* Update JSON output format and documentation of r.profile (see issue [https://github.com/OSGeo/grass/pull/5834 #5834]).&lt;br /&gt;
* If time permits, add shell and csv output formats to r.univar (see issue [https://github.com/OSGeo/grass/pull/5824 #5824]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-4 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.to.db''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5946 #5946])&lt;br /&gt;
* '''r.profile''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5962 #5962])&lt;br /&gt;
* '''r.univar''': Implemented SHELL and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/5966 #5966])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.regression.line (see issue [https://github.com/OSGeo/grass/pull/5950 #5950]).&lt;br /&gt;
* Add JSON output support to r.stats.quantile (see issue [https://github.com/OSGeo/grass/pull/5951 #5951]).&lt;br /&gt;
* Add JSON output support to r.volume (see issue [https://github.com/OSGeo/grass/pull/5949 #5949]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-5 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.line (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.line''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5993 #5993])&lt;br /&gt;
* '''r.stats.quantile (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats.quantile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6007 #6007])&lt;br /&gt;
* '''r.volume (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.volume''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6036 #6036])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to m.measure (see issue [https://github.com/OSGeo/grass/pull/6006 #6006]).&lt;br /&gt;
* Add JSON output support to db.columns (see issue [https://github.com/OSGeo/grass/pull/6008 #6008]).&lt;br /&gt;
* Add JSON output support to db.connect (see issue [https://github.com/OSGeo/grass/pull/6009 #6009]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-6 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''db.columns''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6042 #6042])&lt;br /&gt;
* '''m.measure (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''m.measure''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6053 #6053])&lt;br /&gt;
* '''db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6059 #6059])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to v.db.connect (see issue [https://github.com/OSGeo/grass/pull/6014 #6014]).&lt;br /&gt;
* Add JSON output support to r.regression.multi (see issue [https://github.com/OSGeo/grass/pull/6010 #6010]).&lt;br /&gt;
* If time permits, add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* If time permits, add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-7 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.multi (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''v.db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.multi''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6075 #6075])&lt;br /&gt;
* '''v.db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6077 #6077])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* Add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
* If time permits, add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-8 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.findfile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6091 #6091])&lt;br /&gt;
* '''r3.info (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a flag-handling bug.&lt;br /&gt;
* '''r3.info''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6103 #6103])&lt;br /&gt;
* '''v.what.rast (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a sorting bug.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
* Update format to CSV instead of shell in v.category (see issue [https://github.com/OSGeo/grass/pull/6025 #6025]).&lt;br /&gt;
* Add CSV output support to r.stats (see issue [https://github.com/OSGeo/grass/issues/5835 #5835]).&lt;br /&gt;
* If time permits, add CSV output support to r.profile (see issue [https://github.com/OSGeo/grass/issues/5958 #5958]).&lt;br /&gt;
* If time permits, add CSV headers to r.volume (see issue [https://github.com/OSGeo/grass/issues/6049 #6049]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I don’t have any blockers this week. However, I’ll be a little busy with some personal work from August 3 to August 10, so I’ll try to complete next week’s tasks this week itself.&lt;br /&gt;
&lt;br /&gt;
== Week-9 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.category''': Updated format to CSV instead of shell. (See PR [https://github.com/OSGeo/grass/pull/6132 #6132])&lt;br /&gt;
* '''r.stats''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6133 #6133])&lt;br /&gt;
* '''r.volume''': Implemented CSV column headers support. (See PR [https://github.com/OSGeo/grass/pull/6134 #6134])&lt;br /&gt;
* '''v.what.rast''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6140 #6140])&lt;br /&gt;
* '''r.profile''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6145 #6145])&lt;br /&gt;
* '''r.distance (regression tests)''': Updated regression tests to ensure backward compatibility with new JSON support. (See PR [https://github.com/OSGeo/grass/pull/6150 #6150])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* I’ll be a bit busy with some personal work from August 3 to 10, so I completed next week’s tasks last week itself. I’ve already informed my mentors about my limited availability.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* Yes, I’ll be a bit busy with some personal work from August 3 to 10.&lt;br /&gt;
&lt;br /&gt;
== Week-10 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* This week I was busy with some personal work, so I did not complete any additional tasks. However, I had already finished this week’s tasks last week. This week, I mostly focused on handling reviews for those PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.distance (see issue [https://github.com/OSGeo/grass/issues/6135 #6135]).&lt;br /&gt;
* Add JSON output support to v.class (see issue [https://github.com/OSGeo/grass/issues/6136 #6136]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-11 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.distance''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6204 #6204])&lt;br /&gt;
* '''v.class''': Updated regression tests to ensure backward compatibility with new JSON support and fixed a out-of-bounds bug. (See PR [https://github.com/OSGeo/grass/pull/6205 #6205])&lt;br /&gt;
* '''v.class''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6210 #6210])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Discuss next week’s tasks with my mentors, if no issues are assigned, I’ll identify tools that currently lack JSON support and evaluate which ones are feasible to add it to.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-12 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.what''': Update JSON output format. (See PR [https://github.com/OSGeo/grass/pull/6252 #6252])&lt;br /&gt;
* Addressed review comments on my open PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
= Final Report =&lt;br /&gt;
&lt;br /&gt;
== Title ==&lt;br /&gt;
Add JSON output to different tools in C for GRASS&lt;br /&gt;
&lt;br /&gt;
== Organization ==&lt;br /&gt;
OSGeo (Open Source Geospatial Foundation)&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
During my GSoC project, I addressed the challenge that most GRASS tools produced only plain text output, forcing users to write custom parsing code for Python-based workflows. The task was to make these tools more data-science friendly by adding structured output formats. To achieve this, I extended the use of the Parson library to implement consistent JSON output across multiple modules, refined the JSON structure introduced in the previous GSoC, and added optional support for SHELL and CSV outputs where appropriate. I developed comprehensive Python test cases, ensured backward compatibility, and provided documentation with practical examples such as loading JSON into pandas. As a result, GRASS users can now directly consume structured outputs in modern workflows, reducing parsing overhead, improving interoperability, and paving the way for broader adoption of GRASS in data science contexts.&lt;br /&gt;
&lt;br /&gt;
== The state of integration BEFORE the start of GSoC ==&lt;br /&gt;
Before the start of GSoC, the integration of GRASS with data science workflows was limited due to several challenges. The JSON outputs introduced in the previous GSoC contained deeply nested hierarchies, making them difficult to use directly with libraries such as '''pandas''' or in broader data science pipelines. While some tools already supported JSON (e.g., &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;), many important and highly demanded modules lacked JSON support, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt; and many more. This lack of consistency limited the seamless adoption of GRASS in analytics and machine learning contexts. Moreover, there was no clear '''documentation of the JSON schema''' or guidance on how to parse and utilize these outputs effectively in '''python or pandas''', which made it difficult for users to understand the use cases and integrate GRASS outputs into modern data science workflows.&lt;br /&gt;
&lt;br /&gt;
== The state of integration AFTER GSoC ==&lt;br /&gt;
&lt;br /&gt;
After GSoC, the integration state of JSON and alternative output formats in GRASS has significantly improved. I refactored the JSON structures for tools such as &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;, and others, removing unnecessary nesting introduced during the previous GSoC. This makes their outputs much easier to consume directly in &amp;lt;b&amp;gt;Python&amp;lt;/b&amp;gt; or with &amp;lt;b&amp;gt;pandas&amp;lt;/b&amp;gt;. In addition, JSON support has been extended to many essential and frequently used modules, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;, and many more. I also added detailed documentation of the JSON schema and provided examples showing how to parse and use these outputs effectively with Python and pandas. Together, these improvements make the adoption of GRASS in modern &amp;lt;b&amp;gt;data science workflows&amp;lt;/b&amp;gt; far more seamless and accessible.&lt;br /&gt;
&lt;br /&gt;
=== Enhancements made per tool ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;: Simplified JSON structure for univariate statistics, removed unnecessary hierarchy, and added new output format options (CSV, shell).&lt;br /&gt;
* &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;: Added JSON support for querying raster map colors, with a Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;: Added JSON support for reporting the current mapset, with a Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;: Updated JSON structure for raster map metadata, removing hierarchy for easier parsing. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;: Simplified JSON output for geographic region boundaries, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;: Added JSON support for GRASS version information, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;: Added JSON support for listing imagery groups, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;: Added JSON and CSV support for raster area statistics, with Python and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;: Refined JSON schema for nearest element queries, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;: Added JSON support for listing GRASS database files, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;: Updated JSON schema for printing vector attribute values, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;: Simplified JSON output, added CSV support, and included a matplotlib example for profile visualization.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;: Updated JSON schema for linear regression between rasters, with Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;: Updated JSON schema for category quantiles, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;: Added JSON support for raster volume calculations, fixed missing headers in CSV output, and provided pandas examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.columns&amp;lt;/code&amp;gt;: Added JSON output for listing database table columns, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;: Added JSON output for measuring lengths and areas, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.connect&amp;lt;/code&amp;gt;: Added JSON output for DB connection info, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.multi&amp;lt;/code&amp;gt;: Added JSON output for multiple regression between rasters, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.db.connect&amp;lt;/code&amp;gt;: Added JSON output for vector map attribute connections, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.findfile&amp;lt;/code&amp;gt;: Added JSON output for GRASS database file search, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;: Added JSON output for 3D raster map info, with Python example. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;: Added JSON output for extracting raster values at vector points, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt;: Added JSON and CSV support for locating closest points between raster objects, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;: Added JSON and CSV support for attribute data, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;: Migrated from manually written JSON to Parson-based JSON output, simplified schema, and provided Python parsing examples.&lt;br /&gt;
&lt;br /&gt;
All these changes were accompanied by regression tests to ensure that new JSON/CSV/SHELL/PLAIN output options do not break existing functionality. Additionally, I introduced comprehensive Python test cases for these outputs, making the enhancements reliable and future-proof. During this work, I also fixed several bugs in modules such as &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;, strengthening the stability of GRASS as a whole.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
&lt;br /&gt;
== Log of Pull Requests ==&lt;br /&gt;
Below is a list of pull requests submitted to the GRASS repository during GSoC 2025:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pull Request !! Description  !! Date   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5688 #5688] || r.univar: Fix JSON structure || May 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5773 #5773] || r.what.color: Add test file || May 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5775 #5775] || g.mapset: Add test file || May 26, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5784 #5784] || r.info: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;Closed&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5785 #5785] || g.region: Add Python example || May 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5810 #5810] || g.mapset: Add JSON support || June 2, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5821 #5821] || r.univar: Fix uninitialized zone_value || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5822 #5822] || r.what.color: Add JSON support || June 3, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5842 #5842] || r.info: Update test file || June 5, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5859 #5859] || r.info: Improve interface || June 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5863 #5863] || g.version: Add JSON support || June 9, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5870 #5870] || i.group: Add JSON support || June 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5879 #5879] || r.stats: Add test file || June 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5892 #5892] || r.stats: Add tests for JSON output || June 14, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5898 #5898] || v.distance: Update JSON format || June 16, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5900 #5900] || r.stats: fix uninitialised window value || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5906 #5906] || g.list: Add test file || June 17, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5921 #5921] || g.list: Add JSON support || June 20, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5929 #5929] || g.region: Update JSON format || June 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5946 #5946] || v.to.db: Update JSON format || June 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5962 #5962] || r.profile: Update JSON format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5966 #5966] || r.univar: Add shell and CSV format || June 25, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5990 #5990] || r.regression.line: Add test file || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5993 #5993] || r.regression.line: Add JSON support || June 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6002 #6002] || r.stats.quantile: Add test file || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6007 #6007] || r.stats.quantile: Add JSON support || July 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6027 #6027] || r.volume: Add test file || July 4, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6036 #6036] || r.volume: Add JSON support || July 6, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6042 #6042] || db.columns: Add JSON support || July 7, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6051 #6051] || m.measure: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6052 #6052] || db.connect: Add test file || July 10, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6053 #6053] || m.measure: Add JSON support || July 11, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6059 #6059] || db.connect: Add JSON support || July 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6066 #6066] || r.regression.multi: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6067 #6067] || v.db.connect: Add test file || July 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6075 #6075] || r.regression.multi: Add JSON support || July 18, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6077 #6077] || v.db.connect: Add JSON support || July 19, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6091 #6091] || g.findfile: Add JSON support || July 21, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6098 #6098] || r3.info: Add test file || July 22, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6103 #6103] || r3.info: Add JSON support || July 23, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6109 #6109] || v.what.rast: Add test file || July 24, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6132 #6132] || v.category: Use CSV format instead of shell format || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6133 #6133] || r.stats: add CSV support || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6134 #6134] || r.volume: add csv column headers || July 28, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6140 #6140] || v.what.rast: Add JSON support || July 29, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6145 #6145] || r.profile: Add CSV support || July 30, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6150 #6150] || r.distance: Update existing test cases || August 1, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6204 #6204] || r.distance: Add JSON and CSV support || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6205 #6205] || v.class: Add more test cases and fix out-of-bounds bug || August 12, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6210 #6210] || v.class: Add JSON and CSV support || August 15, 2025  || &amp;lt;span style=&amp;quot;color:#8256d0&amp;quot;&amp;gt;Merged&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6252 #6252] || v.what: Update JSON output format || August 23, 2025  || &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Ttile&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| OSGeo Wiki Page&lt;br /&gt;
| [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C Add JSON output to different tools in C for GRASS]&lt;br /&gt;
|-&lt;br /&gt;
| Github Fork&lt;br /&gt;
| [https://github.com/NishantBansal2003/grass GitHub Fork]&lt;br /&gt;
|-&lt;br /&gt;
| GSoC Page&lt;br /&gt;
| [https://summerofcode.withgoogle.com/programs/2025/projects/GPVGd3DH Link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples &amp;amp; Images ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{GSoC}}&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28657</id>
		<title>GRASS GSoC 2025 Add JSON output to different tools in C</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28657"/>
		<updated>2025-08-24T05:31:56Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: /* Enhancements made per tool */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Nishant Bansal&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo - Open Source Geospatial Foundation]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/NishantBansal2003/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''GSoC proposal''' || [https://docs.google.com/document/d/1ZPQ9RXU7b_RUDmBmAMeK7ZjFAV1WC7Urd1Zlz678jyw/edit?tab=t.0#heading=h.z6ne0og04bp5 View Proposal]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Abstract =&lt;br /&gt;
Currently, most GRASS tools produce data in plain text by default. This means that users who want to process the output in Python need to create custom parsing code. To make this easier, several modules could be improved by oﬀering JSON as an alternative output format. Recently, the Parson library was added to the GRASS codebase to support JSON output in addition to plain text. Building on the advancements made during the last GSoC, my project aims to expand JSON output capabilities to more tools using the Parson library. I will also work on making the JSON structure introduced in the previous GSoC more useful and consistent. Additionally, I plan to add support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
&lt;br /&gt;
# Working with mentors to finalize the structure of the JSON output.&lt;br /&gt;
# Adding an option to choose the output format (plain text or JSON) for each updated tool.&lt;br /&gt;
# Make the JSON structure introduced during the last GSoC more useful and consistent across tools.&lt;br /&gt;
# Developing Python test cases to ensure that the JSON output works correctly and to avoid future issues.&lt;br /&gt;
# Providing basic documentation and example JSON outputs for each modified tool.&lt;br /&gt;
# Adding support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
# Develop simple examples demonstrating how to use JSON output in a data science workflow, such as reading JSON data into pandas or python.&lt;br /&gt;
&lt;br /&gt;
= Timeline =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Period !! Timeline  !! Tasks   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period &lt;br /&gt;
||&lt;br /&gt;
May 8 - June 1  &lt;br /&gt;
|| &lt;br /&gt;
# Reviewed the work done during the last GSoC to stabilize the JSON output.&lt;br /&gt;
# Discussed the priority tools for adding JSON support.&lt;br /&gt;
# Read GRASS documentation to add Python and JSON examples to the documentation.&lt;br /&gt;
|| &lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;13&amp;quot; | Official Coding Period &lt;br /&gt;
|-&lt;br /&gt;
| '''Week 1''' (June 2 - June 8) || &lt;br /&gt;
# Add JSON support for g.mapset [https://github.com/OSGeo/grass/pull/5810 #5810]&lt;br /&gt;
# Fix uninitialized zone_value in r.univar [https://github.com/OSGeo/grass/pull/5821 #5821]&lt;br /&gt;
# Add JSON support for r.what.color [https://github.com/OSGeo/grass/pull/5822 #5822]&lt;br /&gt;
# Update test file in r.info [https://github.com/OSGeo/grass/pull/5842 #5842]&lt;br /&gt;
# Improve interface for r.info [https://github.com/OSGeo/grass/pull/5859 #5859]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 2''' (June 9 - June 15) ||&lt;br /&gt;
# Add JSON support for g.version [https://github.com/OSGeo/grass/pull/5863 #5863]&lt;br /&gt;
# Add JSON support for i.group [https://github.com/OSGeo/grass/pull/5870 #5870]&lt;br /&gt;
# Add test file in r.stats [https://github.com/OSGeo/grass/pull/5879 #5879]&lt;br /&gt;
# Add tests for JSON output in r.stats [https://github.com/OSGeo/grass/pull/5892 #5892]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 3''' (June 16 - June 22) ||&lt;br /&gt;
# Update the JSON output schema of v.distance [https://github.com/OSGeo/grass/pull/5898 #5898]&lt;br /&gt;
# Fix uninitialized window variable in r.stats [https://github.com/OSGeo/grass/pull/5900 #5900]&lt;br /&gt;
# Add test file in g.list [https://github.com/OSGeo/grass/pull/5906 #5906]&lt;br /&gt;
# Add JSON support for g.list [https://github.com/OSGeo/grass/pull/5921 #5921]&lt;br /&gt;
# Update the JSON output schema of g.region [https://github.com/OSGeo/grass/pull/5929 #5929]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 4''' (June 23 - June 29) ||&lt;br /&gt;
# Update the JSON output schema of v.to.db [https://github.com/OSGeo/grass/pull/5946 #5946]&lt;br /&gt;
# Update the JSON output schema of r.profile [https://github.com/OSGeo/grass/pull/5962 #5962]&lt;br /&gt;
# Add SHELL and CSV output support for r.univar [https://github.com/OSGeo/grass/pull/5966 #5966]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 5''' (June 30 - July 6) ||&lt;br /&gt;
# Add test file in r.regression.line [https://github.com/OSGeo/grass/pull/5990 #5990]&lt;br /&gt;
# Add JSON support for r.regression.line [https://github.com/OSGeo/grass/pull/5993 #5993]&lt;br /&gt;
# Add test file in r.stats.quantile [https://github.com/OSGeo/grass/pull/6002 #6002]&lt;br /&gt;
# Add JSON support for r.stats.quantile [https://github.com/OSGeo/grass/pull/6007 #6007]&lt;br /&gt;
# Add test file in r.volume [https://github.com/OSGeo/grass/pull/6027 #6027]&lt;br /&gt;
# Add JSON support for r.volume [https://github.com/OSGeo/grass/pull/6036 #6036]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 6''' (July 7 - July 13) ||&lt;br /&gt;
# Add JSON support for db.columns [https://github.com/OSGeo/grass/pull/6042 #6042]&lt;br /&gt;
# Add test file in m.measure [https://github.com/OSGeo/grass/pull/6051 #6051]&lt;br /&gt;
# Add test file in db.connect [https://github.com/OSGeo/grass/pull/6052 #6052]&lt;br /&gt;
# Add JSON support for m.measure [https://github.com/OSGeo/grass/pull/6053 #6053]&lt;br /&gt;
# Add JSON support for db.connect [https://github.com/OSGeo/grass/pull/6059 #6059]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 7''' (July 14 - July 20) ||&lt;br /&gt;
# Add test file in r.regression.multi [https://github.com/OSGeo/grass/pull/6066 #6066]&lt;br /&gt;
# Add test file in v.db.connect [https://github.com/OSGeo/grass/pull/6067 #6067]&lt;br /&gt;
# Add JSON support for r.regression.multi [https://github.com/OSGeo/grass/pull/6075 #6075]&lt;br /&gt;
# Add JSON support for v.db.connect [https://github.com/OSGeo/grass/pull/6077 #6077]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 8''' (July 21 - July 27) ||&lt;br /&gt;
# Add JSON support for g.findfile [https://github.com/OSGeo/grass/pull/6091 #6091]&lt;br /&gt;
# Add test file in r3.info [https://github.com/OSGeo/grass/pull/6098 #6098]&lt;br /&gt;
# Add JSON support for r3.info [https://github.com/OSGeo/grass/pull/6103 #6103]&lt;br /&gt;
# Add test file in v.what.rast [https://github.com/OSGeo/grass/pull/6109 #6109]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 9''' (July 28 - August 3) ||&lt;br /&gt;
# Update format to CSV instead of shell in v.category [https://github.com/OSGeo/grass/pull/6132 #6132]&lt;br /&gt;
# Add CSV output support to r.stats [https://github.com/OSGeo/grass/pull/6133 #6133]&lt;br /&gt;
# Add CSV headers to r.volume [https://github.com/OSGeo/grass/pull/6134 #6134]&lt;br /&gt;
# Add JSON support for v.what.rast [https://github.com/OSGeo/grass/pull/6140 #6140]&lt;br /&gt;
# Add CSV output support to r.profile [https://github.com/OSGeo/grass/pull/6145 #6145]&lt;br /&gt;
# Update test cases in r.distance [https://github.com/OSGeo/grass/pull/6150 #6150]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 10''' (August 4 - August 10) ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 11''' (August 11 - August 17) ||&lt;br /&gt;
# Add JSON and CSV support for r.distance [https://github.com/OSGeo/grass/pull/6204 #6204]&lt;br /&gt;
# Add more test cases in v.class [https://github.com/OSGeo/grass/pull/6205 #6205]&lt;br /&gt;
# Add JSON and CSV support for v.class [https://github.com/OSGeo/grass/pull/6210 #6210]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 12''' (August 18 - August 24) ||&lt;br /&gt;
# Update JSON output format for v.what [https://github.com/OSGeo/grass/pull/6252 #6252]&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Evaluation Period &lt;br /&gt;
|-&lt;br /&gt;
| August 25 - September 1 ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
# Submit code, final evaluation and write the final GSoC report.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Reports =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* Introduced myself on the [https://discourse.osgeo.org/t/gsoc-2025-introduction-nishant-bansal/147005 OSGeo Discourse mailing list].&lt;br /&gt;
* Created both my [https://wiki.osgeo.org/wiki/User:Nishantbansal2003 personal Wiki page] and the [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C project Wiki page], adding all necessary project-related information.&lt;br /&gt;
* Read GRASS documentation to support the addition of Python and JSON examples.&lt;br /&gt;
* Worked on the following pull requests:&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5688 #5688]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5773 #5773]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5775 #5775]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5784 #5784]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5785 #5785]&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to the g.mapset and r.what.color modules.&lt;br /&gt;
* If time permits, I will begin improving the r.info interface: [https://github.com/OSGeo/grass/issues/5793 Issue #5793]&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
'''Project Discussions and Meetings'''&lt;br /&gt;
* '''14 May 2025''': Introductory meeting discussing JSON support and overall project milestones.&lt;br /&gt;
* '''21 May 2025''': Introduction with fellow developers. Discussed priority tools, adding Python/Pandas examples, and approaches for finalizing the JSON schema for each module.&lt;br /&gt;
&lt;br /&gt;
== Week-1 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.mapset''': Added JSON output support, now you can use -p and -l flags to get JSON-formatted results.&lt;br /&gt;
* '''r.univar''': Fixed a bug causing an uninitialized zone_value.&lt;br /&gt;
* '''r.what.color''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5822 #5822])&lt;br /&gt;
* '''r.info (regression tests)''': To maintain backward compatibility while updating its interface, I added strong regression tests.&lt;br /&gt;
* '''r.info (interface improvements)''': Began improving the module’s interface. (See PR [https://github.com/OSGeo/grass/pull/5859 #5859])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.version (see issue [https://github.com/OSGeo/grass/issues/5816 #5816]).&lt;br /&gt;
* Add JSON output support to i.group (see issue [https://github.com/OSGeo/grass/issues/5815 #5815]).&lt;br /&gt;
* If time permits, write tests for r.stats (see issue [https://github.com/OSGeo/grass/issues/5814 #5814]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-2 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.version''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5863 #5863])&lt;br /&gt;
* '''i.group''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5870 #5870])&lt;br /&gt;
* '''r.stats (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats''': Added tests for JSON output; this uncovered a bug, which was fixed alongside.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.distance (see issue [https://github.com/OSGeo/grass/issues/5846 #5846]).&lt;br /&gt;
* Add JSON output support to g.list (see issue [https://github.com/OSGeo/grass/issues/5848 #5848]).&lt;br /&gt;
* If time permits, fix the JSON output format of g.region (see issue [https://github.com/OSGeo/grass/issues/5828 #5828]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-3 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.distance''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5898 #5898])&lt;br /&gt;
* '''r.stats''': Fixed a bug causing an uninitialized &amp;lt;code&amp;gt;window&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
* '''g.list (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''g.list''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5921 #5921])&lt;br /&gt;
* '''g.region''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5929 #5929])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.to.db (see issue [https://github.com/OSGeo/grass/pull/5711 #5711]).&lt;br /&gt;
* Update JSON output format and documentation of r.profile (see issue [https://github.com/OSGeo/grass/pull/5834 #5834]).&lt;br /&gt;
* If time permits, add shell and csv output formats to r.univar (see issue [https://github.com/OSGeo/grass/pull/5824 #5824]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-4 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.to.db''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5946 #5946])&lt;br /&gt;
* '''r.profile''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5962 #5962])&lt;br /&gt;
* '''r.univar''': Implemented SHELL and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/5966 #5966])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.regression.line (see issue [https://github.com/OSGeo/grass/pull/5950 #5950]).&lt;br /&gt;
* Add JSON output support to r.stats.quantile (see issue [https://github.com/OSGeo/grass/pull/5951 #5951]).&lt;br /&gt;
* Add JSON output support to r.volume (see issue [https://github.com/OSGeo/grass/pull/5949 #5949]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-5 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.line (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.line''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5993 #5993])&lt;br /&gt;
* '''r.stats.quantile (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats.quantile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6007 #6007])&lt;br /&gt;
* '''r.volume (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.volume''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6036 #6036])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to m.measure (see issue [https://github.com/OSGeo/grass/pull/6006 #6006]).&lt;br /&gt;
* Add JSON output support to db.columns (see issue [https://github.com/OSGeo/grass/pull/6008 #6008]).&lt;br /&gt;
* Add JSON output support to db.connect (see issue [https://github.com/OSGeo/grass/pull/6009 #6009]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-6 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''db.columns''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6042 #6042])&lt;br /&gt;
* '''m.measure (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''m.measure''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6053 #6053])&lt;br /&gt;
* '''db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6059 #6059])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to v.db.connect (see issue [https://github.com/OSGeo/grass/pull/6014 #6014]).&lt;br /&gt;
* Add JSON output support to r.regression.multi (see issue [https://github.com/OSGeo/grass/pull/6010 #6010]).&lt;br /&gt;
* If time permits, add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* If time permits, add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-7 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.multi (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''v.db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.multi''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6075 #6075])&lt;br /&gt;
* '''v.db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6077 #6077])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* Add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
* If time permits, add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-8 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.findfile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6091 #6091])&lt;br /&gt;
* '''r3.info (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a flag-handling bug.&lt;br /&gt;
* '''r3.info''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6103 #6103])&lt;br /&gt;
* '''v.what.rast (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a sorting bug.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
* Update format to CSV instead of shell in v.category (see issue [https://github.com/OSGeo/grass/pull/6025 #6025]).&lt;br /&gt;
* Add CSV output support to r.stats (see issue [https://github.com/OSGeo/grass/issues/5835 #5835]).&lt;br /&gt;
* If time permits, add CSV output support to r.profile (see issue [https://github.com/OSGeo/grass/issues/5958 #5958]).&lt;br /&gt;
* If time permits, add CSV headers to r.volume (see issue [https://github.com/OSGeo/grass/issues/6049 #6049]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I don’t have any blockers this week. However, I’ll be a little busy with some personal work from August 3 to August 10, so I’ll try to complete next week’s tasks this week itself.&lt;br /&gt;
&lt;br /&gt;
== Week-9 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.category''': Updated format to CSV instead of shell. (See PR [https://github.com/OSGeo/grass/pull/6132 #6132])&lt;br /&gt;
* '''r.stats''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6133 #6133])&lt;br /&gt;
* '''r.volume''': Implemented CSV column headers support. (See PR [https://github.com/OSGeo/grass/pull/6134 #6134])&lt;br /&gt;
* '''v.what.rast''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6140 #6140])&lt;br /&gt;
* '''r.profile''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6145 #6145])&lt;br /&gt;
* '''r.distance (regression tests)''': Updated regression tests to ensure backward compatibility with new JSON support. (See PR [https://github.com/OSGeo/grass/pull/6150 #6150])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* I’ll be a bit busy with some personal work from August 3 to 10, so I completed next week’s tasks last week itself. I’ve already informed my mentors about my limited availability.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* Yes, I’ll be a bit busy with some personal work from August 3 to 10.&lt;br /&gt;
&lt;br /&gt;
== Week-10 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* This week I was busy with some personal work, so I did not complete any additional tasks. However, I had already finished this week’s tasks last week. This week, I mostly focused on handling reviews for those PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.distance (see issue [https://github.com/OSGeo/grass/issues/6135 #6135]).&lt;br /&gt;
* Add JSON output support to v.class (see issue [https://github.com/OSGeo/grass/issues/6136 #6136]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-11 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.distance''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6204 #6204])&lt;br /&gt;
* '''v.class''': Updated regression tests to ensure backward compatibility with new JSON support and fixed a out-of-bounds bug. (See PR [https://github.com/OSGeo/grass/pull/6205 #6205])&lt;br /&gt;
* '''v.class''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6210 #6210])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Discuss next week’s tasks with my mentors, if no issues are assigned, I’ll identify tools that currently lack JSON support and evaluate which ones are feasible to add it to.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-12 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.what''': Update JSON output format. (See PR [https://github.com/OSGeo/grass/pull/6252 #6252])&lt;br /&gt;
* Addressed review comments on my open PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
= Final Report =&lt;br /&gt;
&lt;br /&gt;
== Title ==&lt;br /&gt;
Add JSON output to different tools in C for GRASS&lt;br /&gt;
&lt;br /&gt;
== Organization ==&lt;br /&gt;
OSGeo (Open Source Geospatial Foundation)&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
During my GSoC project, I addressed the challenge that most GRASS tools produced only plain text output, forcing users to write custom parsing code for Python-based workflows. The task was to make these tools more data-science friendly by adding structured output formats. To achieve this, I extended the use of the Parson library to implement consistent JSON output across multiple modules, refined the JSON structure introduced in the previous GSoC, and added optional support for SHELL and CSV outputs where appropriate. I developed comprehensive Python test cases, ensured backward compatibility, and provided documentation with practical examples such as loading JSON into pandas. As a result, GRASS users can now directly consume structured outputs in modern workflows, reducing parsing overhead, improving interoperability, and paving the way for broader adoption of GRASS in data science contexts.&lt;br /&gt;
&lt;br /&gt;
== The state of integration BEFORE the start of GSoC ==&lt;br /&gt;
Before the start of GSoC, the integration of GRASS with data science workflows was limited due to several challenges. The JSON outputs introduced in the previous GSoC contained deeply nested hierarchies, making them difficult to use directly with libraries such as '''pandas''' or in broader data science pipelines. While some tools already supported JSON (e.g., &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;), many important and highly demanded modules lacked JSON support, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt; and many more. This lack of consistency limited the seamless adoption of GRASS in analytics and machine learning contexts. Moreover, there was no clear '''documentation of the JSON schema''' or guidance on how to parse and utilize these outputs effectively in '''python or pandas''', which made it difficult for users to understand the use cases and integrate GRASS outputs into modern data science workflows.&lt;br /&gt;
&lt;br /&gt;
== The state of integration AFTER GSoC ==&lt;br /&gt;
&lt;br /&gt;
After GSoC, the integration state of JSON and alternative output formats in GRASS has significantly improved. I refactored the JSON structures for tools such as &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;, and others, removing unnecessary nesting introduced during the previous GSoC. This makes their outputs much easier to consume directly in &amp;lt;b&amp;gt;Python&amp;lt;/b&amp;gt; or with &amp;lt;b&amp;gt;pandas&amp;lt;/b&amp;gt;. In addition, JSON support has been extended to many essential and frequently used modules, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;, and many more. I also added detailed documentation of the JSON schema and provided examples showing how to parse and use these outputs effectively with Python and pandas. Together, these improvements make the adoption of GRASS in modern &amp;lt;b&amp;gt;data science workflows&amp;lt;/b&amp;gt; far more seamless and accessible.&lt;br /&gt;
&lt;br /&gt;
=== Enhancements made per tool ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;: Simplified JSON structure for univariate statistics, removed unnecessary hierarchy, and added new output format options (CSV, shell).&lt;br /&gt;
* &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;: Added JSON support for querying raster map colors, with a Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;: Added JSON support for reporting the current mapset, with a Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;: Updated JSON structure for raster map metadata, removing hierarchy for easier parsing. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;: Simplified JSON output for geographic region boundaries, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;: Added JSON support for GRASS version information, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;: Added JSON support for listing imagery groups, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;: Added JSON and CSV support for raster area statistics, with Python and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;: Refined JSON schema for nearest element queries, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;: Added JSON support for listing GRASS database files, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;: Updated JSON schema for printing vector attribute values, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;: Simplified JSON output, added CSV support, and included a matplotlib example for profile visualization.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;: Updated JSON schema for linear regression between rasters, with Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;: Updated JSON schema for category quantiles, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;: Added JSON support for raster volume calculations, fixed missing headers in CSV output, and provided pandas examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.columns&amp;lt;/code&amp;gt;: Added JSON output for listing database table columns, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;: Added JSON output for measuring lengths and areas, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.connect&amp;lt;/code&amp;gt;: Added JSON output for DB connection info, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.multi&amp;lt;/code&amp;gt;: Added JSON output for multiple regression between rasters, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.db.connect&amp;lt;/code&amp;gt;: Added JSON output for vector map attribute connections, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.findfile&amp;lt;/code&amp;gt;: Added JSON output for GRASS database file search, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;: Added JSON output for 3D raster map info, with Python example. Additionally, added PLAIN and SHELL output formats for easier parsing and integration.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;: Added JSON output for extracting raster values at vector points, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt;: Added JSON and CSV support for locating closest points between raster objects, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;: Added JSON and CSV support for attribute data, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;: Migrated from manually written JSON to Parson-based JSON output, simplified schema, and provided Python parsing examples.&lt;br /&gt;
&lt;br /&gt;
All these changes were accompanied by regression tests to ensure that new JSON/CSV/SHELL/PLAIN output options do not break existing functionality. Additionally, I introduced comprehensive Python test cases for these outputs, making the enhancements reliable and future-proof. During this work, I also fixed several bugs in modules such as &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;, strengthening the stability of GRASS as a whole.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
&lt;br /&gt;
== Log of Pull Requests ==&lt;br /&gt;
Below is a list of pull requests submitted to the GRASS repository during GSoC 2025:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pull Request !! Description  !! Date   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5688 #5688] || r.univar: Fix JSON structure || May 20, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5773 #5773] || r.what.color: Add test file || May 25, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5775 #5775] || g.mapset: Add test file || May 26, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5784 #5784] || r.info: Add Python example || May 28, 2025  || Closed&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5785 #5785] || g.region: Add Python example || May 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5810 #5810] || g.mapset: Add JSON support || June 2, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5821 #5821] || r.univar: Fix uninitialized zone_value || June 3, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5822 #5822] || r.what.color: Add JSON support || June 3, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5842 #5842] || r.info: Update test file || June 5, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5859 #5859] || r.info: Improve interface || June 7, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5863 #5863] || g.version: Add JSON support || June 9, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5870 #5870] || i.group: Add JSON support || June 10, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5879 #5879] || r.stats: Add test file || June 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5892 #5892] || r.stats: Add tests for JSON output || June 14, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5898 #5898] || v.distance: Update JSON format || June 16, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5900 #5900] || r.stats: fix uninitialised window value || June 17, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5906 #5906] || g.list: Add test file || June 17, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5921 #5921] || g.list: Add JSON support || June 20, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5929 #5929] || g.region: Update JSON format || June 21, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5946 #5946] || v.to.db: Update JSON format || June 23, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5962 #5962] || r.profile: Update JSON format || June 25, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5966 #5966] || r.univar: Add shell and CSV format || June 25, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5990 #5990] || r.regression.line: Add test file || June 30, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5993 #5993] || r.regression.line: Add JSON support || June 30, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6002 #6002] || r.stats.quantile: Add test file || July 1, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6007 #6007] || r.stats.quantile: Add JSON support || July 1, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6027 #6027] || r.volume: Add test file || July 4, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6036 #6036] || r.volume: Add JSON support || July 6, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6042 #6042] || db.columns: Add JSON support || July 7, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6051 #6051] || m.measure: Add test file || July 10, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6052 #6052] || db.connect: Add test file || July 10, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6053 #6053] || m.measure: Add JSON support || July 11, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6059 #6059] || db.connect: Add JSON support || July 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6066 #6066] || r.regression.multi: Add test file || July 15, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6067 #6067] || v.db.connect: Add test file || July 15, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6075 #6075] || r.regression.multi: Add JSON support || July 18, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6077 #6077] || v.db.connect: Add JSON support || July 19, 2025  || Open&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6091 #6091] || g.findfile: Add JSON support || July 21, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6098 #6098] || r3.info: Add test file || July 22, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6103 #6103] || r3.info: Add JSON support || July 23, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6109 #6109] || v.what.rast: Add test file || July 24, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6132 #6132] || v.category: Use CSV format instead of shell format || July 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6133 #6133] || r.stats: add CSV support || July 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6134 #6134] || r.volume: add csv column headers || July 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6140 #6140] || v.what.rast: Add JSON support || July 29, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6145 #6145] || r.profile: Add CSV support || July 30, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6150 #6150] || r.distance: Update existing test cases || August 1, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6204 #6204] || r.distance: Add JSON and CSV support || August 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6205 #6205] || v.class: Add more test cases and fix out-of-bounds bug || August 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6210 #6210] || v.class: Add JSON and CSV support || August 15, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6252 #6252] || v.what: Update JSON output format || August 23, 2025  || Open&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Ttile&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| OSGeo Wiki Page&lt;br /&gt;
| [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C Add JSON output to different tools in C for GRASS]&lt;br /&gt;
|-&lt;br /&gt;
| Github Fork&lt;br /&gt;
| [https://github.com/NishantBansal2003/grass GitHub Fork]&lt;br /&gt;
|-&lt;br /&gt;
| GSoC Page&lt;br /&gt;
| [https://summerofcode.withgoogle.com/programs/2025/projects/GPVGd3DH Link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples &amp;amp; Images ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{GSoC}}&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28656</id>
		<title>GRASS GSoC 2025 Add JSON output to different tools in C</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28656"/>
		<updated>2025-08-24T05:26:55Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: /* The state of integration AFTER GSoC */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Nishant Bansal&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo - Open Source Geospatial Foundation]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/NishantBansal2003/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''GSoC proposal''' || [https://docs.google.com/document/d/1ZPQ9RXU7b_RUDmBmAMeK7ZjFAV1WC7Urd1Zlz678jyw/edit?tab=t.0#heading=h.z6ne0og04bp5 View Proposal]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Abstract =&lt;br /&gt;
Currently, most GRASS tools produce data in plain text by default. This means that users who want to process the output in Python need to create custom parsing code. To make this easier, several modules could be improved by oﬀering JSON as an alternative output format. Recently, the Parson library was added to the GRASS codebase to support JSON output in addition to plain text. Building on the advancements made during the last GSoC, my project aims to expand JSON output capabilities to more tools using the Parson library. I will also work on making the JSON structure introduced in the previous GSoC more useful and consistent. Additionally, I plan to add support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
&lt;br /&gt;
# Working with mentors to finalize the structure of the JSON output.&lt;br /&gt;
# Adding an option to choose the output format (plain text or JSON) for each updated tool.&lt;br /&gt;
# Make the JSON structure introduced during the last GSoC more useful and consistent across tools.&lt;br /&gt;
# Developing Python test cases to ensure that the JSON output works correctly and to avoid future issues.&lt;br /&gt;
# Providing basic documentation and example JSON outputs for each modified tool.&lt;br /&gt;
# Adding support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
# Develop simple examples demonstrating how to use JSON output in a data science workflow, such as reading JSON data into pandas or python.&lt;br /&gt;
&lt;br /&gt;
= Timeline =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Period !! Timeline  !! Tasks   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period &lt;br /&gt;
||&lt;br /&gt;
May 8 - June 1  &lt;br /&gt;
|| &lt;br /&gt;
# Reviewed the work done during the last GSoC to stabilize the JSON output.&lt;br /&gt;
# Discussed the priority tools for adding JSON support.&lt;br /&gt;
# Read GRASS documentation to add Python and JSON examples to the documentation.&lt;br /&gt;
|| &lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;13&amp;quot; | Official Coding Period &lt;br /&gt;
|-&lt;br /&gt;
| '''Week 1''' (June 2 - June 8) || &lt;br /&gt;
# Add JSON support for g.mapset [https://github.com/OSGeo/grass/pull/5810 #5810]&lt;br /&gt;
# Fix uninitialized zone_value in r.univar [https://github.com/OSGeo/grass/pull/5821 #5821]&lt;br /&gt;
# Add JSON support for r.what.color [https://github.com/OSGeo/grass/pull/5822 #5822]&lt;br /&gt;
# Update test file in r.info [https://github.com/OSGeo/grass/pull/5842 #5842]&lt;br /&gt;
# Improve interface for r.info [https://github.com/OSGeo/grass/pull/5859 #5859]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 2''' (June 9 - June 15) ||&lt;br /&gt;
# Add JSON support for g.version [https://github.com/OSGeo/grass/pull/5863 #5863]&lt;br /&gt;
# Add JSON support for i.group [https://github.com/OSGeo/grass/pull/5870 #5870]&lt;br /&gt;
# Add test file in r.stats [https://github.com/OSGeo/grass/pull/5879 #5879]&lt;br /&gt;
# Add tests for JSON output in r.stats [https://github.com/OSGeo/grass/pull/5892 #5892]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 3''' (June 16 - June 22) ||&lt;br /&gt;
# Update the JSON output schema of v.distance [https://github.com/OSGeo/grass/pull/5898 #5898]&lt;br /&gt;
# Fix uninitialized window variable in r.stats [https://github.com/OSGeo/grass/pull/5900 #5900]&lt;br /&gt;
# Add test file in g.list [https://github.com/OSGeo/grass/pull/5906 #5906]&lt;br /&gt;
# Add JSON support for g.list [https://github.com/OSGeo/grass/pull/5921 #5921]&lt;br /&gt;
# Update the JSON output schema of g.region [https://github.com/OSGeo/grass/pull/5929 #5929]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 4''' (June 23 - June 29) ||&lt;br /&gt;
# Update the JSON output schema of v.to.db [https://github.com/OSGeo/grass/pull/5946 #5946]&lt;br /&gt;
# Update the JSON output schema of r.profile [https://github.com/OSGeo/grass/pull/5962 #5962]&lt;br /&gt;
# Add SHELL and CSV output support for r.univar [https://github.com/OSGeo/grass/pull/5966 #5966]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 5''' (June 30 - July 6) ||&lt;br /&gt;
# Add test file in r.regression.line [https://github.com/OSGeo/grass/pull/5990 #5990]&lt;br /&gt;
# Add JSON support for r.regression.line [https://github.com/OSGeo/grass/pull/5993 #5993]&lt;br /&gt;
# Add test file in r.stats.quantile [https://github.com/OSGeo/grass/pull/6002 #6002]&lt;br /&gt;
# Add JSON support for r.stats.quantile [https://github.com/OSGeo/grass/pull/6007 #6007]&lt;br /&gt;
# Add test file in r.volume [https://github.com/OSGeo/grass/pull/6027 #6027]&lt;br /&gt;
# Add JSON support for r.volume [https://github.com/OSGeo/grass/pull/6036 #6036]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 6''' (July 7 - July 13) ||&lt;br /&gt;
# Add JSON support for db.columns [https://github.com/OSGeo/grass/pull/6042 #6042]&lt;br /&gt;
# Add test file in m.measure [https://github.com/OSGeo/grass/pull/6051 #6051]&lt;br /&gt;
# Add test file in db.connect [https://github.com/OSGeo/grass/pull/6052 #6052]&lt;br /&gt;
# Add JSON support for m.measure [https://github.com/OSGeo/grass/pull/6053 #6053]&lt;br /&gt;
# Add JSON support for db.connect [https://github.com/OSGeo/grass/pull/6059 #6059]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 7''' (July 14 - July 20) ||&lt;br /&gt;
# Add test file in r.regression.multi [https://github.com/OSGeo/grass/pull/6066 #6066]&lt;br /&gt;
# Add test file in v.db.connect [https://github.com/OSGeo/grass/pull/6067 #6067]&lt;br /&gt;
# Add JSON support for r.regression.multi [https://github.com/OSGeo/grass/pull/6075 #6075]&lt;br /&gt;
# Add JSON support for v.db.connect [https://github.com/OSGeo/grass/pull/6077 #6077]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 8''' (July 21 - July 27) ||&lt;br /&gt;
# Add JSON support for g.findfile [https://github.com/OSGeo/grass/pull/6091 #6091]&lt;br /&gt;
# Add test file in r3.info [https://github.com/OSGeo/grass/pull/6098 #6098]&lt;br /&gt;
# Add JSON support for r3.info [https://github.com/OSGeo/grass/pull/6103 #6103]&lt;br /&gt;
# Add test file in v.what.rast [https://github.com/OSGeo/grass/pull/6109 #6109]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 9''' (July 28 - August 3) ||&lt;br /&gt;
# Update format to CSV instead of shell in v.category [https://github.com/OSGeo/grass/pull/6132 #6132]&lt;br /&gt;
# Add CSV output support to r.stats [https://github.com/OSGeo/grass/pull/6133 #6133]&lt;br /&gt;
# Add CSV headers to r.volume [https://github.com/OSGeo/grass/pull/6134 #6134]&lt;br /&gt;
# Add JSON support for v.what.rast [https://github.com/OSGeo/grass/pull/6140 #6140]&lt;br /&gt;
# Add CSV output support to r.profile [https://github.com/OSGeo/grass/pull/6145 #6145]&lt;br /&gt;
# Update test cases in r.distance [https://github.com/OSGeo/grass/pull/6150 #6150]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 10''' (August 4 - August 10) ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 11''' (August 11 - August 17) ||&lt;br /&gt;
# Add JSON and CSV support for r.distance [https://github.com/OSGeo/grass/pull/6204 #6204]&lt;br /&gt;
# Add more test cases in v.class [https://github.com/OSGeo/grass/pull/6205 #6205]&lt;br /&gt;
# Add JSON and CSV support for v.class [https://github.com/OSGeo/grass/pull/6210 #6210]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 12''' (August 18 - August 24) ||&lt;br /&gt;
# Update JSON output format for v.what [https://github.com/OSGeo/grass/pull/6252 #6252]&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Evaluation Period &lt;br /&gt;
|-&lt;br /&gt;
| August 25 - September 1 ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
# Submit code, final evaluation and write the final GSoC report.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Reports =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* Introduced myself on the [https://discourse.osgeo.org/t/gsoc-2025-introduction-nishant-bansal/147005 OSGeo Discourse mailing list].&lt;br /&gt;
* Created both my [https://wiki.osgeo.org/wiki/User:Nishantbansal2003 personal Wiki page] and the [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C project Wiki page], adding all necessary project-related information.&lt;br /&gt;
* Read GRASS documentation to support the addition of Python and JSON examples.&lt;br /&gt;
* Worked on the following pull requests:&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5688 #5688]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5773 #5773]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5775 #5775]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5784 #5784]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5785 #5785]&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to the g.mapset and r.what.color modules.&lt;br /&gt;
* If time permits, I will begin improving the r.info interface: [https://github.com/OSGeo/grass/issues/5793 Issue #5793]&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
'''Project Discussions and Meetings'''&lt;br /&gt;
* '''14 May 2025''': Introductory meeting discussing JSON support and overall project milestones.&lt;br /&gt;
* '''21 May 2025''': Introduction with fellow developers. Discussed priority tools, adding Python/Pandas examples, and approaches for finalizing the JSON schema for each module.&lt;br /&gt;
&lt;br /&gt;
== Week-1 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.mapset''': Added JSON output support, now you can use -p and -l flags to get JSON-formatted results.&lt;br /&gt;
* '''r.univar''': Fixed a bug causing an uninitialized zone_value.&lt;br /&gt;
* '''r.what.color''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5822 #5822])&lt;br /&gt;
* '''r.info (regression tests)''': To maintain backward compatibility while updating its interface, I added strong regression tests.&lt;br /&gt;
* '''r.info (interface improvements)''': Began improving the module’s interface. (See PR [https://github.com/OSGeo/grass/pull/5859 #5859])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.version (see issue [https://github.com/OSGeo/grass/issues/5816 #5816]).&lt;br /&gt;
* Add JSON output support to i.group (see issue [https://github.com/OSGeo/grass/issues/5815 #5815]).&lt;br /&gt;
* If time permits, write tests for r.stats (see issue [https://github.com/OSGeo/grass/issues/5814 #5814]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-2 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.version''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5863 #5863])&lt;br /&gt;
* '''i.group''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5870 #5870])&lt;br /&gt;
* '''r.stats (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats''': Added tests for JSON output; this uncovered a bug, which was fixed alongside.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.distance (see issue [https://github.com/OSGeo/grass/issues/5846 #5846]).&lt;br /&gt;
* Add JSON output support to g.list (see issue [https://github.com/OSGeo/grass/issues/5848 #5848]).&lt;br /&gt;
* If time permits, fix the JSON output format of g.region (see issue [https://github.com/OSGeo/grass/issues/5828 #5828]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-3 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.distance''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5898 #5898])&lt;br /&gt;
* '''r.stats''': Fixed a bug causing an uninitialized &amp;lt;code&amp;gt;window&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
* '''g.list (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''g.list''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5921 #5921])&lt;br /&gt;
* '''g.region''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5929 #5929])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.to.db (see issue [https://github.com/OSGeo/grass/pull/5711 #5711]).&lt;br /&gt;
* Update JSON output format and documentation of r.profile (see issue [https://github.com/OSGeo/grass/pull/5834 #5834]).&lt;br /&gt;
* If time permits, add shell and csv output formats to r.univar (see issue [https://github.com/OSGeo/grass/pull/5824 #5824]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-4 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.to.db''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5946 #5946])&lt;br /&gt;
* '''r.profile''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5962 #5962])&lt;br /&gt;
* '''r.univar''': Implemented SHELL and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/5966 #5966])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.regression.line (see issue [https://github.com/OSGeo/grass/pull/5950 #5950]).&lt;br /&gt;
* Add JSON output support to r.stats.quantile (see issue [https://github.com/OSGeo/grass/pull/5951 #5951]).&lt;br /&gt;
* Add JSON output support to r.volume (see issue [https://github.com/OSGeo/grass/pull/5949 #5949]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-5 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.line (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.line''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5993 #5993])&lt;br /&gt;
* '''r.stats.quantile (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats.quantile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6007 #6007])&lt;br /&gt;
* '''r.volume (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.volume''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6036 #6036])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to m.measure (see issue [https://github.com/OSGeo/grass/pull/6006 #6006]).&lt;br /&gt;
* Add JSON output support to db.columns (see issue [https://github.com/OSGeo/grass/pull/6008 #6008]).&lt;br /&gt;
* Add JSON output support to db.connect (see issue [https://github.com/OSGeo/grass/pull/6009 #6009]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-6 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''db.columns''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6042 #6042])&lt;br /&gt;
* '''m.measure (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''m.measure''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6053 #6053])&lt;br /&gt;
* '''db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6059 #6059])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to v.db.connect (see issue [https://github.com/OSGeo/grass/pull/6014 #6014]).&lt;br /&gt;
* Add JSON output support to r.regression.multi (see issue [https://github.com/OSGeo/grass/pull/6010 #6010]).&lt;br /&gt;
* If time permits, add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* If time permits, add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-7 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.multi (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''v.db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.multi''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6075 #6075])&lt;br /&gt;
* '''v.db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6077 #6077])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* Add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
* If time permits, add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-8 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.findfile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6091 #6091])&lt;br /&gt;
* '''r3.info (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a flag-handling bug.&lt;br /&gt;
* '''r3.info''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6103 #6103])&lt;br /&gt;
* '''v.what.rast (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a sorting bug.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
* Update format to CSV instead of shell in v.category (see issue [https://github.com/OSGeo/grass/pull/6025 #6025]).&lt;br /&gt;
* Add CSV output support to r.stats (see issue [https://github.com/OSGeo/grass/issues/5835 #5835]).&lt;br /&gt;
* If time permits, add CSV output support to r.profile (see issue [https://github.com/OSGeo/grass/issues/5958 #5958]).&lt;br /&gt;
* If time permits, add CSV headers to r.volume (see issue [https://github.com/OSGeo/grass/issues/6049 #6049]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I don’t have any blockers this week. However, I’ll be a little busy with some personal work from August 3 to August 10, so I’ll try to complete next week’s tasks this week itself.&lt;br /&gt;
&lt;br /&gt;
== Week-9 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.category''': Updated format to CSV instead of shell. (See PR [https://github.com/OSGeo/grass/pull/6132 #6132])&lt;br /&gt;
* '''r.stats''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6133 #6133])&lt;br /&gt;
* '''r.volume''': Implemented CSV column headers support. (See PR [https://github.com/OSGeo/grass/pull/6134 #6134])&lt;br /&gt;
* '''v.what.rast''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6140 #6140])&lt;br /&gt;
* '''r.profile''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6145 #6145])&lt;br /&gt;
* '''r.distance (regression tests)''': Updated regression tests to ensure backward compatibility with new JSON support. (See PR [https://github.com/OSGeo/grass/pull/6150 #6150])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* I’ll be a bit busy with some personal work from August 3 to 10, so I completed next week’s tasks last week itself. I’ve already informed my mentors about my limited availability.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* Yes, I’ll be a bit busy with some personal work from August 3 to 10.&lt;br /&gt;
&lt;br /&gt;
== Week-10 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* This week I was busy with some personal work, so I did not complete any additional tasks. However, I had already finished this week’s tasks last week. This week, I mostly focused on handling reviews for those PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.distance (see issue [https://github.com/OSGeo/grass/issues/6135 #6135]).&lt;br /&gt;
* Add JSON output support to v.class (see issue [https://github.com/OSGeo/grass/issues/6136 #6136]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-11 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.distance''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6204 #6204])&lt;br /&gt;
* '''v.class''': Updated regression tests to ensure backward compatibility with new JSON support and fixed a out-of-bounds bug. (See PR [https://github.com/OSGeo/grass/pull/6205 #6205])&lt;br /&gt;
* '''v.class''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6210 #6210])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Discuss next week’s tasks with my mentors, if no issues are assigned, I’ll identify tools that currently lack JSON support and evaluate which ones are feasible to add it to.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-12 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.what''': Update JSON output format. (See PR [https://github.com/OSGeo/grass/pull/6252 #6252])&lt;br /&gt;
* Addressed review comments on my open PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
= Final Report =&lt;br /&gt;
&lt;br /&gt;
== Title ==&lt;br /&gt;
Add JSON output to different tools in C for GRASS&lt;br /&gt;
&lt;br /&gt;
== Organization ==&lt;br /&gt;
OSGeo (Open Source Geospatial Foundation)&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
During my GSoC project, I addressed the challenge that most GRASS tools produced only plain text output, forcing users to write custom parsing code for Python-based workflows. The task was to make these tools more data-science friendly by adding structured output formats. To achieve this, I extended the use of the Parson library to implement consistent JSON output across multiple modules, refined the JSON structure introduced in the previous GSoC, and added optional support for SHELL and CSV outputs where appropriate. I developed comprehensive Python test cases, ensured backward compatibility, and provided documentation with practical examples such as loading JSON into pandas. As a result, GRASS users can now directly consume structured outputs in modern workflows, reducing parsing overhead, improving interoperability, and paving the way for broader adoption of GRASS in data science contexts.&lt;br /&gt;
&lt;br /&gt;
== The state of integration BEFORE the start of GSoC ==&lt;br /&gt;
Before the start of GSoC, the integration of GRASS with data science workflows was limited due to several challenges. The JSON outputs introduced in the previous GSoC contained deeply nested hierarchies, making them difficult to use directly with libraries such as '''pandas''' or in broader data science pipelines. While some tools already supported JSON (e.g., &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;), many important and highly demanded modules lacked JSON support, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt; and many more. This lack of consistency limited the seamless adoption of GRASS in analytics and machine learning contexts. Moreover, there was no clear '''documentation of the JSON schema''' or guidance on how to parse and utilize these outputs effectively in '''python or pandas''', which made it difficult for users to understand the use cases and integrate GRASS outputs into modern data science workflows.&lt;br /&gt;
&lt;br /&gt;
== The state of integration AFTER GSoC ==&lt;br /&gt;
&lt;br /&gt;
After GSoC, the integration state of JSON and alternative output formats in GRASS has significantly improved. I refactored the JSON structures for tools such as &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;, and others, removing unnecessary nesting introduced during the previous GSoC. This makes their outputs much easier to consume directly in &amp;lt;b&amp;gt;Python&amp;lt;/b&amp;gt; or with &amp;lt;b&amp;gt;pandas&amp;lt;/b&amp;gt;. In addition, JSON support has been extended to many essential and frequently used modules, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;, and many more. I also added detailed documentation of the JSON schema and provided examples showing how to parse and use these outputs effectively with Python and pandas. Together, these improvements make the adoption of GRASS in modern &amp;lt;b&amp;gt;data science workflows&amp;lt;/b&amp;gt; far more seamless and accessible.&lt;br /&gt;
&lt;br /&gt;
=== Enhancements made per tool ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;: Simplified JSON structure for univariate statistics, removed unnecessary hierarchy, and added new output format options (CSV, shell).&lt;br /&gt;
* &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;: Added JSON support for querying raster map colors, with a Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;: Added JSON support for reporting the current mapset, with a Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;: Updated JSON structure for raster map metadata, removing hierarchy for easier parsing.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;: Simplified JSON output for geographic region boundaries, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;: Added JSON support for GRASS version information, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;: Added JSON support for listing imagery groups, with examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;: Added JSON and CSV support for raster area statistics, with Python and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;: Refined JSON schema for nearest element queries, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;: Added JSON support for listing GRASS database files, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;: Updated JSON schema for printing vector attribute values, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;: Simplified JSON output, added CSV support, and included a matplotlib example for profile visualization.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;: Updated JSON schema for linear regression between rasters, with Python parsing example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;: Updated JSON schema for category quantiles, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;: Added JSON support for raster volume calculations, fixed missing headers in CSV output, and provided pandas examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.columns&amp;lt;/code&amp;gt;: Added JSON output for listing database table columns, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;: Added JSON output for measuring lengths and areas, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;db.connect&amp;lt;/code&amp;gt;: Added JSON output for DB connection info, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.regression.multi&amp;lt;/code&amp;gt;: Added JSON output for multiple regression between rasters, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.db.connect&amp;lt;/code&amp;gt;: Added JSON output for vector map attribute connections, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;g.findfile&amp;lt;/code&amp;gt;: Added JSON output for GRASS database file search, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;: Added JSON output for 3D raster map info, with Python example.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;: Added JSON output for extracting raster values at vector points, with pandas integration example.&lt;br /&gt;
* &amp;lt;code&amp;gt;r.distance&amp;lt;/code&amp;gt;: Added JSON and CSV support for locating closest points between raster objects, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;: Added JSON and CSV support for attribute data, with pandas and CLI examples.&lt;br /&gt;
* &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;: Migrated from manually written JSON to Parson-based JSON output, simplified schema, and provided Python parsing examples.&lt;br /&gt;
&lt;br /&gt;
All these changes were accompanied by regression tests to ensure that new JSON/CSV/SHELL/PLAIN output options do not break existing functionality. Additionally, I introduced comprehensive Python test cases for these outputs, making the enhancements reliable and future-proof. During this work, I also fixed several bugs in modules such as &amp;lt;code&amp;gt;r.stats&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what.rast&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;v.class&amp;lt;/code&amp;gt;, strengthening the stability of GRASS as a whole.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
&lt;br /&gt;
== Log of Pull Requests ==&lt;br /&gt;
Below is a list of pull requests submitted to the GRASS repository during GSoC 2025:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pull Request !! Description  !! Date   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5688 #5688] || r.univar: Fix JSON structure || May 20, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5773 #5773] || r.what.color: Add test file || May 25, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5775 #5775] || g.mapset: Add test file || May 26, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5784 #5784] || r.info: Add Python example || May 28, 2025  || Closed&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5785 #5785] || g.region: Add Python example || May 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5810 #5810] || g.mapset: Add JSON support || June 2, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5821 #5821] || r.univar: Fix uninitialized zone_value || June 3, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5822 #5822] || r.what.color: Add JSON support || June 3, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5842 #5842] || r.info: Update test file || June 5, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5859 #5859] || r.info: Improve interface || June 7, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5863 #5863] || g.version: Add JSON support || June 9, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5870 #5870] || i.group: Add JSON support || June 10, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5879 #5879] || r.stats: Add test file || June 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5892 #5892] || r.stats: Add tests for JSON output || June 14, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5898 #5898] || v.distance: Update JSON format || June 16, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5900 #5900] || r.stats: fix uninitialised window value || June 17, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5906 #5906] || g.list: Add test file || June 17, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5921 #5921] || g.list: Add JSON support || June 20, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5929 #5929] || g.region: Update JSON format || June 21, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5946 #5946] || v.to.db: Update JSON format || June 23, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5962 #5962] || r.profile: Update JSON format || June 25, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5966 #5966] || r.univar: Add shell and CSV format || June 25, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5990 #5990] || r.regression.line: Add test file || June 30, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5993 #5993] || r.regression.line: Add JSON support || June 30, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6002 #6002] || r.stats.quantile: Add test file || July 1, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6007 #6007] || r.stats.quantile: Add JSON support || July 1, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6027 #6027] || r.volume: Add test file || July 4, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6036 #6036] || r.volume: Add JSON support || July 6, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6042 #6042] || db.columns: Add JSON support || July 7, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6051 #6051] || m.measure: Add test file || July 10, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6052 #6052] || db.connect: Add test file || July 10, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6053 #6053] || m.measure: Add JSON support || July 11, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6059 #6059] || db.connect: Add JSON support || July 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6066 #6066] || r.regression.multi: Add test file || July 15, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6067 #6067] || v.db.connect: Add test file || July 15, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6075 #6075] || r.regression.multi: Add JSON support || July 18, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6077 #6077] || v.db.connect: Add JSON support || July 19, 2025  || Open&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6091 #6091] || g.findfile: Add JSON support || July 21, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6098 #6098] || r3.info: Add test file || July 22, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6103 #6103] || r3.info: Add JSON support || July 23, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6109 #6109] || v.what.rast: Add test file || July 24, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6132 #6132] || v.category: Use CSV format instead of shell format || July 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6133 #6133] || r.stats: add CSV support || July 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6134 #6134] || r.volume: add csv column headers || July 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6140 #6140] || v.what.rast: Add JSON support || July 29, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6145 #6145] || r.profile: Add CSV support || July 30, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6150 #6150] || r.distance: Update existing test cases || August 1, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6204 #6204] || r.distance: Add JSON and CSV support || August 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6205 #6205] || v.class: Add more test cases and fix out-of-bounds bug || August 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6210 #6210] || v.class: Add JSON and CSV support || August 15, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6252 #6252] || v.what: Update JSON output format || August 23, 2025  || Open&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Ttile&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| OSGeo Wiki Page&lt;br /&gt;
| [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C Add JSON output to different tools in C for GRASS]&lt;br /&gt;
|-&lt;br /&gt;
| Github Fork&lt;br /&gt;
| [https://github.com/NishantBansal2003/grass GitHub Fork]&lt;br /&gt;
|-&lt;br /&gt;
| GSoC Page&lt;br /&gt;
| [https://summerofcode.withgoogle.com/programs/2025/projects/GPVGd3DH Link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples &amp;amp; Images ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{GSoC}}&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28655</id>
		<title>GRASS GSoC 2025 Add JSON output to different tools in C</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28655"/>
		<updated>2025-08-23T15:12:19Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: /* The state of integration AFTER GSoC */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Nishant Bansal&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo - Open Source Geospatial Foundation]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/NishantBansal2003/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''GSoC proposal''' || [https://docs.google.com/document/d/1ZPQ9RXU7b_RUDmBmAMeK7ZjFAV1WC7Urd1Zlz678jyw/edit?tab=t.0#heading=h.z6ne0og04bp5 View Proposal]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Abstract =&lt;br /&gt;
Currently, most GRASS tools produce data in plain text by default. This means that users who want to process the output in Python need to create custom parsing code. To make this easier, several modules could be improved by oﬀering JSON as an alternative output format. Recently, the Parson library was added to the GRASS codebase to support JSON output in addition to plain text. Building on the advancements made during the last GSoC, my project aims to expand JSON output capabilities to more tools using the Parson library. I will also work on making the JSON structure introduced in the previous GSoC more useful and consistent. Additionally, I plan to add support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
&lt;br /&gt;
# Working with mentors to finalize the structure of the JSON output.&lt;br /&gt;
# Adding an option to choose the output format (plain text or JSON) for each updated tool.&lt;br /&gt;
# Make the JSON structure introduced during the last GSoC more useful and consistent across tools.&lt;br /&gt;
# Developing Python test cases to ensure that the JSON output works correctly and to avoid future issues.&lt;br /&gt;
# Providing basic documentation and example JSON outputs for each modified tool.&lt;br /&gt;
# Adding support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
# Develop simple examples demonstrating how to use JSON output in a data science workflow, such as reading JSON data into pandas or python.&lt;br /&gt;
&lt;br /&gt;
= Timeline =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Period !! Timeline  !! Tasks   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period &lt;br /&gt;
||&lt;br /&gt;
May 8 - June 1  &lt;br /&gt;
|| &lt;br /&gt;
# Reviewed the work done during the last GSoC to stabilize the JSON output.&lt;br /&gt;
# Discussed the priority tools for adding JSON support.&lt;br /&gt;
# Read GRASS documentation to add Python and JSON examples to the documentation.&lt;br /&gt;
|| &lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;13&amp;quot; | Official Coding Period &lt;br /&gt;
|-&lt;br /&gt;
| '''Week 1''' (June 2 - June 8) || &lt;br /&gt;
# Add JSON support for g.mapset [https://github.com/OSGeo/grass/pull/5810 #5810]&lt;br /&gt;
# Fix uninitialized zone_value in r.univar [https://github.com/OSGeo/grass/pull/5821 #5821]&lt;br /&gt;
# Add JSON support for r.what.color [https://github.com/OSGeo/grass/pull/5822 #5822]&lt;br /&gt;
# Update test file in r.info [https://github.com/OSGeo/grass/pull/5842 #5842]&lt;br /&gt;
# Improve interface for r.info [https://github.com/OSGeo/grass/pull/5859 #5859]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 2''' (June 9 - June 15) ||&lt;br /&gt;
# Add JSON support for g.version [https://github.com/OSGeo/grass/pull/5863 #5863]&lt;br /&gt;
# Add JSON support for i.group [https://github.com/OSGeo/grass/pull/5870 #5870]&lt;br /&gt;
# Add test file in r.stats [https://github.com/OSGeo/grass/pull/5879 #5879]&lt;br /&gt;
# Add tests for JSON output in r.stats [https://github.com/OSGeo/grass/pull/5892 #5892]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 3''' (June 16 - June 22) ||&lt;br /&gt;
# Update the JSON output schema of v.distance [https://github.com/OSGeo/grass/pull/5898 #5898]&lt;br /&gt;
# Fix uninitialized window variable in r.stats [https://github.com/OSGeo/grass/pull/5900 #5900]&lt;br /&gt;
# Add test file in g.list [https://github.com/OSGeo/grass/pull/5906 #5906]&lt;br /&gt;
# Add JSON support for g.list [https://github.com/OSGeo/grass/pull/5921 #5921]&lt;br /&gt;
# Update the JSON output schema of g.region [https://github.com/OSGeo/grass/pull/5929 #5929]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 4''' (June 23 - June 29) ||&lt;br /&gt;
# Update the JSON output schema of v.to.db [https://github.com/OSGeo/grass/pull/5946 #5946]&lt;br /&gt;
# Update the JSON output schema of r.profile [https://github.com/OSGeo/grass/pull/5962 #5962]&lt;br /&gt;
# Add SHELL and CSV output support for r.univar [https://github.com/OSGeo/grass/pull/5966 #5966]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 5''' (June 30 - July 6) ||&lt;br /&gt;
# Add test file in r.regression.line [https://github.com/OSGeo/grass/pull/5990 #5990]&lt;br /&gt;
# Add JSON support for r.regression.line [https://github.com/OSGeo/grass/pull/5993 #5993]&lt;br /&gt;
# Add test file in r.stats.quantile [https://github.com/OSGeo/grass/pull/6002 #6002]&lt;br /&gt;
# Add JSON support for r.stats.quantile [https://github.com/OSGeo/grass/pull/6007 #6007]&lt;br /&gt;
# Add test file in r.volume [https://github.com/OSGeo/grass/pull/6027 #6027]&lt;br /&gt;
# Add JSON support for r.volume [https://github.com/OSGeo/grass/pull/6036 #6036]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 6''' (July 7 - July 13) ||&lt;br /&gt;
# Add JSON support for db.columns [https://github.com/OSGeo/grass/pull/6042 #6042]&lt;br /&gt;
# Add test file in m.measure [https://github.com/OSGeo/grass/pull/6051 #6051]&lt;br /&gt;
# Add test file in db.connect [https://github.com/OSGeo/grass/pull/6052 #6052]&lt;br /&gt;
# Add JSON support for m.measure [https://github.com/OSGeo/grass/pull/6053 #6053]&lt;br /&gt;
# Add JSON support for db.connect [https://github.com/OSGeo/grass/pull/6059 #6059]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 7''' (July 14 - July 20) ||&lt;br /&gt;
# Add test file in r.regression.multi [https://github.com/OSGeo/grass/pull/6066 #6066]&lt;br /&gt;
# Add test file in v.db.connect [https://github.com/OSGeo/grass/pull/6067 #6067]&lt;br /&gt;
# Add JSON support for r.regression.multi [https://github.com/OSGeo/grass/pull/6075 #6075]&lt;br /&gt;
# Add JSON support for v.db.connect [https://github.com/OSGeo/grass/pull/6077 #6077]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 8''' (July 21 - July 27) ||&lt;br /&gt;
# Add JSON support for g.findfile [https://github.com/OSGeo/grass/pull/6091 #6091]&lt;br /&gt;
# Add test file in r3.info [https://github.com/OSGeo/grass/pull/6098 #6098]&lt;br /&gt;
# Add JSON support for r3.info [https://github.com/OSGeo/grass/pull/6103 #6103]&lt;br /&gt;
# Add test file in v.what.rast [https://github.com/OSGeo/grass/pull/6109 #6109]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 9''' (July 28 - August 3) ||&lt;br /&gt;
# Update format to CSV instead of shell in v.category [https://github.com/OSGeo/grass/pull/6132 #6132]&lt;br /&gt;
# Add CSV output support to r.stats [https://github.com/OSGeo/grass/pull/6133 #6133]&lt;br /&gt;
# Add CSV headers to r.volume [https://github.com/OSGeo/grass/pull/6134 #6134]&lt;br /&gt;
# Add JSON support for v.what.rast [https://github.com/OSGeo/grass/pull/6140 #6140]&lt;br /&gt;
# Add CSV output support to r.profile [https://github.com/OSGeo/grass/pull/6145 #6145]&lt;br /&gt;
# Update test cases in r.distance [https://github.com/OSGeo/grass/pull/6150 #6150]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 10''' (August 4 - August 10) ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 11''' (August 11 - August 17) ||&lt;br /&gt;
# Add JSON and CSV support for r.distance [https://github.com/OSGeo/grass/pull/6204 #6204]&lt;br /&gt;
# Add more test cases in v.class [https://github.com/OSGeo/grass/pull/6205 #6205]&lt;br /&gt;
# Add JSON and CSV support for v.class [https://github.com/OSGeo/grass/pull/6210 #6210]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 12''' (August 18 - August 24) ||&lt;br /&gt;
# Update JSON output format for v.what [https://github.com/OSGeo/grass/pull/6252 #6252]&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Evaluation Period &lt;br /&gt;
|-&lt;br /&gt;
| August 25 - September 1 ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
# Submit code, final evaluation and write the final GSoC report.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Reports =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* Introduced myself on the [https://discourse.osgeo.org/t/gsoc-2025-introduction-nishant-bansal/147005 OSGeo Discourse mailing list].&lt;br /&gt;
* Created both my [https://wiki.osgeo.org/wiki/User:Nishantbansal2003 personal Wiki page] and the [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C project Wiki page], adding all necessary project-related information.&lt;br /&gt;
* Read GRASS documentation to support the addition of Python and JSON examples.&lt;br /&gt;
* Worked on the following pull requests:&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5688 #5688]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5773 #5773]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5775 #5775]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5784 #5784]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5785 #5785]&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to the g.mapset and r.what.color modules.&lt;br /&gt;
* If time permits, I will begin improving the r.info interface: [https://github.com/OSGeo/grass/issues/5793 Issue #5793]&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
'''Project Discussions and Meetings'''&lt;br /&gt;
* '''14 May 2025''': Introductory meeting discussing JSON support and overall project milestones.&lt;br /&gt;
* '''21 May 2025''': Introduction with fellow developers. Discussed priority tools, adding Python/Pandas examples, and approaches for finalizing the JSON schema for each module.&lt;br /&gt;
&lt;br /&gt;
== Week-1 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.mapset''': Added JSON output support, now you can use -p and -l flags to get JSON-formatted results.&lt;br /&gt;
* '''r.univar''': Fixed a bug causing an uninitialized zone_value.&lt;br /&gt;
* '''r.what.color''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5822 #5822])&lt;br /&gt;
* '''r.info (regression tests)''': To maintain backward compatibility while updating its interface, I added strong regression tests.&lt;br /&gt;
* '''r.info (interface improvements)''': Began improving the module’s interface. (See PR [https://github.com/OSGeo/grass/pull/5859 #5859])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.version (see issue [https://github.com/OSGeo/grass/issues/5816 #5816]).&lt;br /&gt;
* Add JSON output support to i.group (see issue [https://github.com/OSGeo/grass/issues/5815 #5815]).&lt;br /&gt;
* If time permits, write tests for r.stats (see issue [https://github.com/OSGeo/grass/issues/5814 #5814]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-2 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.version''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5863 #5863])&lt;br /&gt;
* '''i.group''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5870 #5870])&lt;br /&gt;
* '''r.stats (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats''': Added tests for JSON output; this uncovered a bug, which was fixed alongside.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.distance (see issue [https://github.com/OSGeo/grass/issues/5846 #5846]).&lt;br /&gt;
* Add JSON output support to g.list (see issue [https://github.com/OSGeo/grass/issues/5848 #5848]).&lt;br /&gt;
* If time permits, fix the JSON output format of g.region (see issue [https://github.com/OSGeo/grass/issues/5828 #5828]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-3 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.distance''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5898 #5898])&lt;br /&gt;
* '''r.stats''': Fixed a bug causing an uninitialized &amp;lt;code&amp;gt;window&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
* '''g.list (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''g.list''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5921 #5921])&lt;br /&gt;
* '''g.region''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5929 #5929])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.to.db (see issue [https://github.com/OSGeo/grass/pull/5711 #5711]).&lt;br /&gt;
* Update JSON output format and documentation of r.profile (see issue [https://github.com/OSGeo/grass/pull/5834 #5834]).&lt;br /&gt;
* If time permits, add shell and csv output formats to r.univar (see issue [https://github.com/OSGeo/grass/pull/5824 #5824]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-4 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.to.db''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5946 #5946])&lt;br /&gt;
* '''r.profile''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5962 #5962])&lt;br /&gt;
* '''r.univar''': Implemented SHELL and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/5966 #5966])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.regression.line (see issue [https://github.com/OSGeo/grass/pull/5950 #5950]).&lt;br /&gt;
* Add JSON output support to r.stats.quantile (see issue [https://github.com/OSGeo/grass/pull/5951 #5951]).&lt;br /&gt;
* Add JSON output support to r.volume (see issue [https://github.com/OSGeo/grass/pull/5949 #5949]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-5 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.line (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.line''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5993 #5993])&lt;br /&gt;
* '''r.stats.quantile (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats.quantile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6007 #6007])&lt;br /&gt;
* '''r.volume (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.volume''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6036 #6036])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to m.measure (see issue [https://github.com/OSGeo/grass/pull/6006 #6006]).&lt;br /&gt;
* Add JSON output support to db.columns (see issue [https://github.com/OSGeo/grass/pull/6008 #6008]).&lt;br /&gt;
* Add JSON output support to db.connect (see issue [https://github.com/OSGeo/grass/pull/6009 #6009]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-6 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''db.columns''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6042 #6042])&lt;br /&gt;
* '''m.measure (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''m.measure''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6053 #6053])&lt;br /&gt;
* '''db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6059 #6059])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to v.db.connect (see issue [https://github.com/OSGeo/grass/pull/6014 #6014]).&lt;br /&gt;
* Add JSON output support to r.regression.multi (see issue [https://github.com/OSGeo/grass/pull/6010 #6010]).&lt;br /&gt;
* If time permits, add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* If time permits, add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-7 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.multi (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''v.db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.multi''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6075 #6075])&lt;br /&gt;
* '''v.db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6077 #6077])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* Add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
* If time permits, add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-8 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.findfile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6091 #6091])&lt;br /&gt;
* '''r3.info (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a flag-handling bug.&lt;br /&gt;
* '''r3.info''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6103 #6103])&lt;br /&gt;
* '''v.what.rast (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a sorting bug.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
* Update format to CSV instead of shell in v.category (see issue [https://github.com/OSGeo/grass/pull/6025 #6025]).&lt;br /&gt;
* Add CSV output support to r.stats (see issue [https://github.com/OSGeo/grass/issues/5835 #5835]).&lt;br /&gt;
* If time permits, add CSV output support to r.profile (see issue [https://github.com/OSGeo/grass/issues/5958 #5958]).&lt;br /&gt;
* If time permits, add CSV headers to r.volume (see issue [https://github.com/OSGeo/grass/issues/6049 #6049]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I don’t have any blockers this week. However, I’ll be a little busy with some personal work from August 3 to August 10, so I’ll try to complete next week’s tasks this week itself.&lt;br /&gt;
&lt;br /&gt;
== Week-9 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.category''': Updated format to CSV instead of shell. (See PR [https://github.com/OSGeo/grass/pull/6132 #6132])&lt;br /&gt;
* '''r.stats''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6133 #6133])&lt;br /&gt;
* '''r.volume''': Implemented CSV column headers support. (See PR [https://github.com/OSGeo/grass/pull/6134 #6134])&lt;br /&gt;
* '''v.what.rast''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6140 #6140])&lt;br /&gt;
* '''r.profile''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6145 #6145])&lt;br /&gt;
* '''r.distance (regression tests)''': Updated regression tests to ensure backward compatibility with new JSON support. (See PR [https://github.com/OSGeo/grass/pull/6150 #6150])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* I’ll be a bit busy with some personal work from August 3 to 10, so I completed next week’s tasks last week itself. I’ve already informed my mentors about my limited availability.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* Yes, I’ll be a bit busy with some personal work from August 3 to 10.&lt;br /&gt;
&lt;br /&gt;
== Week-10 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* This week I was busy with some personal work, so I did not complete any additional tasks. However, I had already finished this week’s tasks last week. This week, I mostly focused on handling reviews for those PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.distance (see issue [https://github.com/OSGeo/grass/issues/6135 #6135]).&lt;br /&gt;
* Add JSON output support to v.class (see issue [https://github.com/OSGeo/grass/issues/6136 #6136]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-11 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.distance''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6204 #6204])&lt;br /&gt;
* '''v.class''': Updated regression tests to ensure backward compatibility with new JSON support and fixed a out-of-bounds bug. (See PR [https://github.com/OSGeo/grass/pull/6205 #6205])&lt;br /&gt;
* '''v.class''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6210 #6210])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Discuss next week’s tasks with my mentors, if no issues are assigned, I’ll identify tools that currently lack JSON support and evaluate which ones are feasible to add it to.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-12 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.what''': Update JSON output format. (See PR [https://github.com/OSGeo/grass/pull/6252 #6252])&lt;br /&gt;
* Addressed review comments on my open PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
= Final Report =&lt;br /&gt;
&lt;br /&gt;
== Title ==&lt;br /&gt;
Add JSON output to different tools in C for GRASS&lt;br /&gt;
&lt;br /&gt;
== Organization ==&lt;br /&gt;
OSGeo (Open Source Geospatial Foundation)&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
During my GSoC project, I addressed the challenge that most GRASS tools produced only plain text output, forcing users to write custom parsing code for Python-based workflows. The task was to make these tools more data-science friendly by adding structured output formats. To achieve this, I extended the use of the Parson library to implement consistent JSON output across multiple modules, refined the JSON structure introduced in the previous GSoC, and added optional support for SHELL and CSV outputs where appropriate. I developed comprehensive Python test cases, ensured backward compatibility, and provided documentation with practical examples such as loading JSON into pandas. As a result, GRASS users can now directly consume structured outputs in modern workflows, reducing parsing overhead, improving interoperability, and paving the way for broader adoption of GRASS in data science contexts.&lt;br /&gt;
&lt;br /&gt;
== The state of integration BEFORE the start of GSoC ==&lt;br /&gt;
Before the start of GSoC, the integration of GRASS with data science workflows was limited due to several challenges. The JSON outputs introduced in the previous GSoC contained deeply nested hierarchies, making them difficult to use directly with libraries such as '''pandas''' or in broader data science pipelines. While some tools already supported JSON (e.g., &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;), many important and highly demanded modules lacked JSON support, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt; and many more. This lack of consistency limited the seamless adoption of GRASS in analytics and machine learning contexts. Moreover, there was no clear '''documentation of the JSON schema''' or guidance on how to parse and utilize these outputs effectively in '''python or pandas''', which made it difficult for users to understand the use cases and integrate GRASS outputs into modern data science workflows.&lt;br /&gt;
&lt;br /&gt;
== The state of integration AFTER GSoC ==&lt;br /&gt;
After GSoC, the integration state has significantly improved. I fixed all the JSON structures for tools such as &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;, and others, which were unnecessarily nested in the previous GSoC, making their outputs now much easier to consume directly in '''python or with pandas'''. In addition, JSON support has been extended to many essential and frequently used modules, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt;, and many more. I also wrote detailed documentation of the JSON schema and provided examples on how to parse and use these outputs effectively with python and pandas, covering both newly enhanced tools and older ones that previously lacked documentation. Together, these improvements make the adoption of GRASS in modern '''data science workflows''' far more seamless and accessible.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
&lt;br /&gt;
== Log of Pull Requests ==&lt;br /&gt;
Below is a list of pull requests submitted to the GRASS repository during GSoC 2025:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pull Request !! Description  !! Date   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5688 #5688] || r.univar: Fix JSON structure || May 20, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5773 #5773] || r.what.color: Add test file || May 25, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5775 #5775] || g.mapset: Add test file || May 26, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5784 #5784] || r.info: Add Python example || May 28, 2025  || Closed&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5785 #5785] || g.region: Add Python example || May 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5810 #5810] || g.mapset: Add JSON support || June 2, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5821 #5821] || r.univar: Fix uninitialized zone_value || June 3, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5822 #5822] || r.what.color: Add JSON support || June 3, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5842 #5842] || r.info: Update test file || June 5, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5859 #5859] || r.info: Improve interface || June 7, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5863 #5863] || g.version: Add JSON support || June 9, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5870 #5870] || i.group: Add JSON support || June 10, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5879 #5879] || r.stats: Add test file || June 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5892 #5892] || r.stats: Add tests for JSON output || June 14, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5898 #5898] || v.distance: Update JSON format || June 16, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5900 #5900] || r.stats: fix uninitialised window value || June 17, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5906 #5906] || g.list: Add test file || June 17, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5921 #5921] || g.list: Add JSON support || June 20, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5929 #5929] || g.region: Update JSON format || June 21, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5946 #5946] || v.to.db: Update JSON format || June 23, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5962 #5962] || r.profile: Update JSON format || June 25, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5966 #5966] || r.univar: Add shell and CSV format || June 25, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5990 #5990] || r.regression.line: Add test file || June 30, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5993 #5993] || r.regression.line: Add JSON support || June 30, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6002 #6002] || r.stats.quantile: Add test file || July 1, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6007 #6007] || r.stats.quantile: Add JSON support || July 1, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6027 #6027] || r.volume: Add test file || July 4, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6036 #6036] || r.volume: Add JSON support || July 6, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6042 #6042] || db.columns: Add JSON support || July 7, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6051 #6051] || m.measure: Add test file || July 10, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6052 #6052] || db.connect: Add test file || July 10, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6053 #6053] || m.measure: Add JSON support || July 11, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6059 #6059] || db.connect: Add JSON support || July 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6066 #6066] || r.regression.multi: Add test file || July 15, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6067 #6067] || v.db.connect: Add test file || July 15, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6075 #6075] || r.regression.multi: Add JSON support || July 18, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6077 #6077] || v.db.connect: Add JSON support || July 19, 2025  || Open&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6091 #6091] || g.findfile: Add JSON support || July 21, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6098 #6098] || r3.info: Add test file || July 22, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6103 #6103] || r3.info: Add JSON support || July 23, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6109 #6109] || v.what.rast: Add test file || July 24, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6132 #6132] || v.category: Use CSV format instead of shell format || July 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6133 #6133] || r.stats: add CSV support || July 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6134 #6134] || r.volume: add csv column headers || July 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6140 #6140] || v.what.rast: Add JSON support || July 29, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6145 #6145] || r.profile: Add CSV support || July 30, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6150 #6150] || r.distance: Update existing test cases || August 1, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6204 #6204] || r.distance: Add JSON and CSV support || August 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6205 #6205] || v.class: Add more test cases and fix out-of-bounds bug || August 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6210 #6210] || v.class: Add JSON and CSV support || August 15, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6252 #6252] || v.what: Update JSON output format || August 23, 2025  || Open&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Ttile&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| OSGeo Wiki Page&lt;br /&gt;
| [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C Add JSON output to different tools in C for GRASS]&lt;br /&gt;
|-&lt;br /&gt;
| Github Fork&lt;br /&gt;
| [https://github.com/NishantBansal2003/grass GitHub Fork]&lt;br /&gt;
|-&lt;br /&gt;
| GSoC Page&lt;br /&gt;
| [https://summerofcode.withgoogle.com/programs/2025/projects/GPVGd3DH Link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples &amp;amp; Images ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{GSoC}}&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28654</id>
		<title>GRASS GSoC 2025 Add JSON output to different tools in C</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28654"/>
		<updated>2025-08-23T15:05:29Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: /* The state of integration BEFORE the start of GSoC */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Nishant Bansal&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo - Open Source Geospatial Foundation]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/NishantBansal2003/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''GSoC proposal''' || [https://docs.google.com/document/d/1ZPQ9RXU7b_RUDmBmAMeK7ZjFAV1WC7Urd1Zlz678jyw/edit?tab=t.0#heading=h.z6ne0og04bp5 View Proposal]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Abstract =&lt;br /&gt;
Currently, most GRASS tools produce data in plain text by default. This means that users who want to process the output in Python need to create custom parsing code. To make this easier, several modules could be improved by oﬀering JSON as an alternative output format. Recently, the Parson library was added to the GRASS codebase to support JSON output in addition to plain text. Building on the advancements made during the last GSoC, my project aims to expand JSON output capabilities to more tools using the Parson library. I will also work on making the JSON structure introduced in the previous GSoC more useful and consistent. Additionally, I plan to add support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
&lt;br /&gt;
# Working with mentors to finalize the structure of the JSON output.&lt;br /&gt;
# Adding an option to choose the output format (plain text or JSON) for each updated tool.&lt;br /&gt;
# Make the JSON structure introduced during the last GSoC more useful and consistent across tools.&lt;br /&gt;
# Developing Python test cases to ensure that the JSON output works correctly and to avoid future issues.&lt;br /&gt;
# Providing basic documentation and example JSON outputs for each modified tool.&lt;br /&gt;
# Adding support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
# Develop simple examples demonstrating how to use JSON output in a data science workflow, such as reading JSON data into pandas or python.&lt;br /&gt;
&lt;br /&gt;
= Timeline =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Period !! Timeline  !! Tasks   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period &lt;br /&gt;
||&lt;br /&gt;
May 8 - June 1  &lt;br /&gt;
|| &lt;br /&gt;
# Reviewed the work done during the last GSoC to stabilize the JSON output.&lt;br /&gt;
# Discussed the priority tools for adding JSON support.&lt;br /&gt;
# Read GRASS documentation to add Python and JSON examples to the documentation.&lt;br /&gt;
|| &lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;13&amp;quot; | Official Coding Period &lt;br /&gt;
|-&lt;br /&gt;
| '''Week 1''' (June 2 - June 8) || &lt;br /&gt;
# Add JSON support for g.mapset [https://github.com/OSGeo/grass/pull/5810 #5810]&lt;br /&gt;
# Fix uninitialized zone_value in r.univar [https://github.com/OSGeo/grass/pull/5821 #5821]&lt;br /&gt;
# Add JSON support for r.what.color [https://github.com/OSGeo/grass/pull/5822 #5822]&lt;br /&gt;
# Update test file in r.info [https://github.com/OSGeo/grass/pull/5842 #5842]&lt;br /&gt;
# Improve interface for r.info [https://github.com/OSGeo/grass/pull/5859 #5859]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 2''' (June 9 - June 15) ||&lt;br /&gt;
# Add JSON support for g.version [https://github.com/OSGeo/grass/pull/5863 #5863]&lt;br /&gt;
# Add JSON support for i.group [https://github.com/OSGeo/grass/pull/5870 #5870]&lt;br /&gt;
# Add test file in r.stats [https://github.com/OSGeo/grass/pull/5879 #5879]&lt;br /&gt;
# Add tests for JSON output in r.stats [https://github.com/OSGeo/grass/pull/5892 #5892]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 3''' (June 16 - June 22) ||&lt;br /&gt;
# Update the JSON output schema of v.distance [https://github.com/OSGeo/grass/pull/5898 #5898]&lt;br /&gt;
# Fix uninitialized window variable in r.stats [https://github.com/OSGeo/grass/pull/5900 #5900]&lt;br /&gt;
# Add test file in g.list [https://github.com/OSGeo/grass/pull/5906 #5906]&lt;br /&gt;
# Add JSON support for g.list [https://github.com/OSGeo/grass/pull/5921 #5921]&lt;br /&gt;
# Update the JSON output schema of g.region [https://github.com/OSGeo/grass/pull/5929 #5929]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 4''' (June 23 - June 29) ||&lt;br /&gt;
# Update the JSON output schema of v.to.db [https://github.com/OSGeo/grass/pull/5946 #5946]&lt;br /&gt;
# Update the JSON output schema of r.profile [https://github.com/OSGeo/grass/pull/5962 #5962]&lt;br /&gt;
# Add SHELL and CSV output support for r.univar [https://github.com/OSGeo/grass/pull/5966 #5966]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 5''' (June 30 - July 6) ||&lt;br /&gt;
# Add test file in r.regression.line [https://github.com/OSGeo/grass/pull/5990 #5990]&lt;br /&gt;
# Add JSON support for r.regression.line [https://github.com/OSGeo/grass/pull/5993 #5993]&lt;br /&gt;
# Add test file in r.stats.quantile [https://github.com/OSGeo/grass/pull/6002 #6002]&lt;br /&gt;
# Add JSON support for r.stats.quantile [https://github.com/OSGeo/grass/pull/6007 #6007]&lt;br /&gt;
# Add test file in r.volume [https://github.com/OSGeo/grass/pull/6027 #6027]&lt;br /&gt;
# Add JSON support for r.volume [https://github.com/OSGeo/grass/pull/6036 #6036]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 6''' (July 7 - July 13) ||&lt;br /&gt;
# Add JSON support for db.columns [https://github.com/OSGeo/grass/pull/6042 #6042]&lt;br /&gt;
# Add test file in m.measure [https://github.com/OSGeo/grass/pull/6051 #6051]&lt;br /&gt;
# Add test file in db.connect [https://github.com/OSGeo/grass/pull/6052 #6052]&lt;br /&gt;
# Add JSON support for m.measure [https://github.com/OSGeo/grass/pull/6053 #6053]&lt;br /&gt;
# Add JSON support for db.connect [https://github.com/OSGeo/grass/pull/6059 #6059]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 7''' (July 14 - July 20) ||&lt;br /&gt;
# Add test file in r.regression.multi [https://github.com/OSGeo/grass/pull/6066 #6066]&lt;br /&gt;
# Add test file in v.db.connect [https://github.com/OSGeo/grass/pull/6067 #6067]&lt;br /&gt;
# Add JSON support for r.regression.multi [https://github.com/OSGeo/grass/pull/6075 #6075]&lt;br /&gt;
# Add JSON support for v.db.connect [https://github.com/OSGeo/grass/pull/6077 #6077]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 8''' (July 21 - July 27) ||&lt;br /&gt;
# Add JSON support for g.findfile [https://github.com/OSGeo/grass/pull/6091 #6091]&lt;br /&gt;
# Add test file in r3.info [https://github.com/OSGeo/grass/pull/6098 #6098]&lt;br /&gt;
# Add JSON support for r3.info [https://github.com/OSGeo/grass/pull/6103 #6103]&lt;br /&gt;
# Add test file in v.what.rast [https://github.com/OSGeo/grass/pull/6109 #6109]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 9''' (July 28 - August 3) ||&lt;br /&gt;
# Update format to CSV instead of shell in v.category [https://github.com/OSGeo/grass/pull/6132 #6132]&lt;br /&gt;
# Add CSV output support to r.stats [https://github.com/OSGeo/grass/pull/6133 #6133]&lt;br /&gt;
# Add CSV headers to r.volume [https://github.com/OSGeo/grass/pull/6134 #6134]&lt;br /&gt;
# Add JSON support for v.what.rast [https://github.com/OSGeo/grass/pull/6140 #6140]&lt;br /&gt;
# Add CSV output support to r.profile [https://github.com/OSGeo/grass/pull/6145 #6145]&lt;br /&gt;
# Update test cases in r.distance [https://github.com/OSGeo/grass/pull/6150 #6150]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 10''' (August 4 - August 10) ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 11''' (August 11 - August 17) ||&lt;br /&gt;
# Add JSON and CSV support for r.distance [https://github.com/OSGeo/grass/pull/6204 #6204]&lt;br /&gt;
# Add more test cases in v.class [https://github.com/OSGeo/grass/pull/6205 #6205]&lt;br /&gt;
# Add JSON and CSV support for v.class [https://github.com/OSGeo/grass/pull/6210 #6210]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 12''' (August 18 - August 24) ||&lt;br /&gt;
# Update JSON output format for v.what [https://github.com/OSGeo/grass/pull/6252 #6252]&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Evaluation Period &lt;br /&gt;
|-&lt;br /&gt;
| August 25 - September 1 ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
# Submit code, final evaluation and write the final GSoC report.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Reports =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* Introduced myself on the [https://discourse.osgeo.org/t/gsoc-2025-introduction-nishant-bansal/147005 OSGeo Discourse mailing list].&lt;br /&gt;
* Created both my [https://wiki.osgeo.org/wiki/User:Nishantbansal2003 personal Wiki page] and the [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C project Wiki page], adding all necessary project-related information.&lt;br /&gt;
* Read GRASS documentation to support the addition of Python and JSON examples.&lt;br /&gt;
* Worked on the following pull requests:&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5688 #5688]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5773 #5773]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5775 #5775]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5784 #5784]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5785 #5785]&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to the g.mapset and r.what.color modules.&lt;br /&gt;
* If time permits, I will begin improving the r.info interface: [https://github.com/OSGeo/grass/issues/5793 Issue #5793]&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
'''Project Discussions and Meetings'''&lt;br /&gt;
* '''14 May 2025''': Introductory meeting discussing JSON support and overall project milestones.&lt;br /&gt;
* '''21 May 2025''': Introduction with fellow developers. Discussed priority tools, adding Python/Pandas examples, and approaches for finalizing the JSON schema for each module.&lt;br /&gt;
&lt;br /&gt;
== Week-1 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.mapset''': Added JSON output support, now you can use -p and -l flags to get JSON-formatted results.&lt;br /&gt;
* '''r.univar''': Fixed a bug causing an uninitialized zone_value.&lt;br /&gt;
* '''r.what.color''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5822 #5822])&lt;br /&gt;
* '''r.info (regression tests)''': To maintain backward compatibility while updating its interface, I added strong regression tests.&lt;br /&gt;
* '''r.info (interface improvements)''': Began improving the module’s interface. (See PR [https://github.com/OSGeo/grass/pull/5859 #5859])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.version (see issue [https://github.com/OSGeo/grass/issues/5816 #5816]).&lt;br /&gt;
* Add JSON output support to i.group (see issue [https://github.com/OSGeo/grass/issues/5815 #5815]).&lt;br /&gt;
* If time permits, write tests for r.stats (see issue [https://github.com/OSGeo/grass/issues/5814 #5814]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-2 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.version''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5863 #5863])&lt;br /&gt;
* '''i.group''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5870 #5870])&lt;br /&gt;
* '''r.stats (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats''': Added tests for JSON output; this uncovered a bug, which was fixed alongside.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.distance (see issue [https://github.com/OSGeo/grass/issues/5846 #5846]).&lt;br /&gt;
* Add JSON output support to g.list (see issue [https://github.com/OSGeo/grass/issues/5848 #5848]).&lt;br /&gt;
* If time permits, fix the JSON output format of g.region (see issue [https://github.com/OSGeo/grass/issues/5828 #5828]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-3 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.distance''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5898 #5898])&lt;br /&gt;
* '''r.stats''': Fixed a bug causing an uninitialized &amp;lt;code&amp;gt;window&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
* '''g.list (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''g.list''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5921 #5921])&lt;br /&gt;
* '''g.region''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5929 #5929])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.to.db (see issue [https://github.com/OSGeo/grass/pull/5711 #5711]).&lt;br /&gt;
* Update JSON output format and documentation of r.profile (see issue [https://github.com/OSGeo/grass/pull/5834 #5834]).&lt;br /&gt;
* If time permits, add shell and csv output formats to r.univar (see issue [https://github.com/OSGeo/grass/pull/5824 #5824]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-4 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.to.db''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5946 #5946])&lt;br /&gt;
* '''r.profile''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5962 #5962])&lt;br /&gt;
* '''r.univar''': Implemented SHELL and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/5966 #5966])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.regression.line (see issue [https://github.com/OSGeo/grass/pull/5950 #5950]).&lt;br /&gt;
* Add JSON output support to r.stats.quantile (see issue [https://github.com/OSGeo/grass/pull/5951 #5951]).&lt;br /&gt;
* Add JSON output support to r.volume (see issue [https://github.com/OSGeo/grass/pull/5949 #5949]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-5 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.line (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.line''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5993 #5993])&lt;br /&gt;
* '''r.stats.quantile (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats.quantile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6007 #6007])&lt;br /&gt;
* '''r.volume (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.volume''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6036 #6036])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to m.measure (see issue [https://github.com/OSGeo/grass/pull/6006 #6006]).&lt;br /&gt;
* Add JSON output support to db.columns (see issue [https://github.com/OSGeo/grass/pull/6008 #6008]).&lt;br /&gt;
* Add JSON output support to db.connect (see issue [https://github.com/OSGeo/grass/pull/6009 #6009]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-6 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''db.columns''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6042 #6042])&lt;br /&gt;
* '''m.measure (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''m.measure''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6053 #6053])&lt;br /&gt;
* '''db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6059 #6059])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to v.db.connect (see issue [https://github.com/OSGeo/grass/pull/6014 #6014]).&lt;br /&gt;
* Add JSON output support to r.regression.multi (see issue [https://github.com/OSGeo/grass/pull/6010 #6010]).&lt;br /&gt;
* If time permits, add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* If time permits, add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-7 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.multi (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''v.db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.multi''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6075 #6075])&lt;br /&gt;
* '''v.db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6077 #6077])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* Add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
* If time permits, add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-8 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.findfile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6091 #6091])&lt;br /&gt;
* '''r3.info (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a flag-handling bug.&lt;br /&gt;
* '''r3.info''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6103 #6103])&lt;br /&gt;
* '''v.what.rast (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a sorting bug.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
* Update format to CSV instead of shell in v.category (see issue [https://github.com/OSGeo/grass/pull/6025 #6025]).&lt;br /&gt;
* Add CSV output support to r.stats (see issue [https://github.com/OSGeo/grass/issues/5835 #5835]).&lt;br /&gt;
* If time permits, add CSV output support to r.profile (see issue [https://github.com/OSGeo/grass/issues/5958 #5958]).&lt;br /&gt;
* If time permits, add CSV headers to r.volume (see issue [https://github.com/OSGeo/grass/issues/6049 #6049]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I don’t have any blockers this week. However, I’ll be a little busy with some personal work from August 3 to August 10, so I’ll try to complete next week’s tasks this week itself.&lt;br /&gt;
&lt;br /&gt;
== Week-9 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.category''': Updated format to CSV instead of shell. (See PR [https://github.com/OSGeo/grass/pull/6132 #6132])&lt;br /&gt;
* '''r.stats''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6133 #6133])&lt;br /&gt;
* '''r.volume''': Implemented CSV column headers support. (See PR [https://github.com/OSGeo/grass/pull/6134 #6134])&lt;br /&gt;
* '''v.what.rast''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6140 #6140])&lt;br /&gt;
* '''r.profile''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6145 #6145])&lt;br /&gt;
* '''r.distance (regression tests)''': Updated regression tests to ensure backward compatibility with new JSON support. (See PR [https://github.com/OSGeo/grass/pull/6150 #6150])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* I’ll be a bit busy with some personal work from August 3 to 10, so I completed next week’s tasks last week itself. I’ve already informed my mentors about my limited availability.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* Yes, I’ll be a bit busy with some personal work from August 3 to 10.&lt;br /&gt;
&lt;br /&gt;
== Week-10 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* This week I was busy with some personal work, so I did not complete any additional tasks. However, I had already finished this week’s tasks last week. This week, I mostly focused on handling reviews for those PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.distance (see issue [https://github.com/OSGeo/grass/issues/6135 #6135]).&lt;br /&gt;
* Add JSON output support to v.class (see issue [https://github.com/OSGeo/grass/issues/6136 #6136]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-11 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.distance''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6204 #6204])&lt;br /&gt;
* '''v.class''': Updated regression tests to ensure backward compatibility with new JSON support and fixed a out-of-bounds bug. (See PR [https://github.com/OSGeo/grass/pull/6205 #6205])&lt;br /&gt;
* '''v.class''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6210 #6210])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Discuss next week’s tasks with my mentors, if no issues are assigned, I’ll identify tools that currently lack JSON support and evaluate which ones are feasible to add it to.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-12 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.what''': Update JSON output format. (See PR [https://github.com/OSGeo/grass/pull/6252 #6252])&lt;br /&gt;
* Addressed review comments on my open PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
= Final Report =&lt;br /&gt;
&lt;br /&gt;
== Title ==&lt;br /&gt;
Add JSON output to different tools in C for GRASS&lt;br /&gt;
&lt;br /&gt;
== Organization ==&lt;br /&gt;
OSGeo (Open Source Geospatial Foundation)&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
During my GSoC project, I addressed the challenge that most GRASS tools produced only plain text output, forcing users to write custom parsing code for Python-based workflows. The task was to make these tools more data-science friendly by adding structured output formats. To achieve this, I extended the use of the Parson library to implement consistent JSON output across multiple modules, refined the JSON structure introduced in the previous GSoC, and added optional support for SHELL and CSV outputs where appropriate. I developed comprehensive Python test cases, ensured backward compatibility, and provided documentation with practical examples such as loading JSON into pandas. As a result, GRASS users can now directly consume structured outputs in modern workflows, reducing parsing overhead, improving interoperability, and paving the way for broader adoption of GRASS in data science contexts.&lt;br /&gt;
&lt;br /&gt;
== The state of integration BEFORE the start of GSoC ==&lt;br /&gt;
Before the start of GSoC, the integration of GRASS with data science workflows was limited due to several challenges. The JSON outputs introduced in the previous GSoC contained deeply nested hierarchies, making them difficult to use directly with libraries such as '''pandas''' or in broader data science pipelines. While some tools already supported JSON (e.g., &amp;lt;code&amp;gt;r.univar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.distance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.region&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.to.db&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v.what&amp;lt;/code&amp;gt;), many important and highly demanded modules lacked JSON support, including &amp;lt;code&amp;gt;r3.info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.mapset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.what.color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i.group&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g.list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.regression.line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.stats.quantile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;r.volume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m.measure&amp;lt;/code&amp;gt; and many more. This lack of consistency limited the seamless adoption of GRASS in analytics and machine learning contexts. Moreover, there was no clear '''documentation of the JSON schema''' or guidance on how to parse and utilize these outputs effectively in '''python or pandas''', which made it difficult for users to understand the use cases and integrate GRASS outputs into modern data science workflows.&lt;br /&gt;
&lt;br /&gt;
== The state of integration AFTER GSoC ==&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
&lt;br /&gt;
== Log of Pull Requests ==&lt;br /&gt;
Below is a list of pull requests submitted to the GRASS repository during GSoC 2025:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pull Request !! Description  !! Date   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5688 #5688] || r.univar: Fix JSON structure || May 20, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5773 #5773] || r.what.color: Add test file || May 25, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5775 #5775] || g.mapset: Add test file || May 26, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5784 #5784] || r.info: Add Python example || May 28, 2025  || Closed&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5785 #5785] || g.region: Add Python example || May 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5810 #5810] || g.mapset: Add JSON support || June 2, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5821 #5821] || r.univar: Fix uninitialized zone_value || June 3, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5822 #5822] || r.what.color: Add JSON support || June 3, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5842 #5842] || r.info: Update test file || June 5, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5859 #5859] || r.info: Improve interface || June 7, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5863 #5863] || g.version: Add JSON support || June 9, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5870 #5870] || i.group: Add JSON support || June 10, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5879 #5879] || r.stats: Add test file || June 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5892 #5892] || r.stats: Add tests for JSON output || June 14, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5898 #5898] || v.distance: Update JSON format || June 16, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5900 #5900] || r.stats: fix uninitialised window value || June 17, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5906 #5906] || g.list: Add test file || June 17, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5921 #5921] || g.list: Add JSON support || June 20, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5929 #5929] || g.region: Update JSON format || June 21, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5946 #5946] || v.to.db: Update JSON format || June 23, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5962 #5962] || r.profile: Update JSON format || June 25, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5966 #5966] || r.univar: Add shell and CSV format || June 25, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5990 #5990] || r.regression.line: Add test file || June 30, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5993 #5993] || r.regression.line: Add JSON support || June 30, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6002 #6002] || r.stats.quantile: Add test file || July 1, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6007 #6007] || r.stats.quantile: Add JSON support || July 1, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6027 #6027] || r.volume: Add test file || July 4, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6036 #6036] || r.volume: Add JSON support || July 6, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6042 #6042] || db.columns: Add JSON support || July 7, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6051 #6051] || m.measure: Add test file || July 10, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6052 #6052] || db.connect: Add test file || July 10, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6053 #6053] || m.measure: Add JSON support || July 11, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6059 #6059] || db.connect: Add JSON support || July 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6066 #6066] || r.regression.multi: Add test file || July 15, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6067 #6067] || v.db.connect: Add test file || July 15, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6075 #6075] || r.regression.multi: Add JSON support || July 18, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6077 #6077] || v.db.connect: Add JSON support || July 19, 2025  || Open&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6091 #6091] || g.findfile: Add JSON support || July 21, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6098 #6098] || r3.info: Add test file || July 22, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6103 #6103] || r3.info: Add JSON support || July 23, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6109 #6109] || v.what.rast: Add test file || July 24, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6132 #6132] || v.category: Use CSV format instead of shell format || July 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6133 #6133] || r.stats: add CSV support || July 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6134 #6134] || r.volume: add csv column headers || July 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6140 #6140] || v.what.rast: Add JSON support || July 29, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6145 #6145] || r.profile: Add CSV support || July 30, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6150 #6150] || r.distance: Update existing test cases || August 1, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6204 #6204] || r.distance: Add JSON and CSV support || August 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6205 #6205] || v.class: Add more test cases and fix out-of-bounds bug || August 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6210 #6210] || v.class: Add JSON and CSV support || August 15, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6252 #6252] || v.what: Update JSON output format || August 23, 2025  || Open&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Ttile&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| OSGeo Wiki Page&lt;br /&gt;
| [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C Add JSON output to different tools in C for GRASS]&lt;br /&gt;
|-&lt;br /&gt;
| Github Fork&lt;br /&gt;
| [https://github.com/NishantBansal2003/grass GitHub Fork]&lt;br /&gt;
|-&lt;br /&gt;
| GSoC Page&lt;br /&gt;
| [https://summerofcode.withgoogle.com/programs/2025/projects/GPVGd3DH Link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples &amp;amp; Images ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{GSoC}}&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28653</id>
		<title>GRASS GSoC 2025 Add JSON output to different tools in C</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28653"/>
		<updated>2025-08-23T14:53:37Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: /* Abstract */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Nishant Bansal&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo - Open Source Geospatial Foundation]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/NishantBansal2003/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''GSoC proposal''' || [https://docs.google.com/document/d/1ZPQ9RXU7b_RUDmBmAMeK7ZjFAV1WC7Urd1Zlz678jyw/edit?tab=t.0#heading=h.z6ne0og04bp5 View Proposal]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Abstract =&lt;br /&gt;
Currently, most GRASS tools produce data in plain text by default. This means that users who want to process the output in Python need to create custom parsing code. To make this easier, several modules could be improved by oﬀering JSON as an alternative output format. Recently, the Parson library was added to the GRASS codebase to support JSON output in addition to plain text. Building on the advancements made during the last GSoC, my project aims to expand JSON output capabilities to more tools using the Parson library. I will also work on making the JSON structure introduced in the previous GSoC more useful and consistent. Additionally, I plan to add support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
&lt;br /&gt;
# Working with mentors to finalize the structure of the JSON output.&lt;br /&gt;
# Adding an option to choose the output format (plain text or JSON) for each updated tool.&lt;br /&gt;
# Make the JSON structure introduced during the last GSoC more useful and consistent across tools.&lt;br /&gt;
# Developing Python test cases to ensure that the JSON output works correctly and to avoid future issues.&lt;br /&gt;
# Providing basic documentation and example JSON outputs for each modified tool.&lt;br /&gt;
# Adding support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
# Develop simple examples demonstrating how to use JSON output in a data science workflow, such as reading JSON data into pandas or python.&lt;br /&gt;
&lt;br /&gt;
= Timeline =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Period !! Timeline  !! Tasks   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period &lt;br /&gt;
||&lt;br /&gt;
May 8 - June 1  &lt;br /&gt;
|| &lt;br /&gt;
# Reviewed the work done during the last GSoC to stabilize the JSON output.&lt;br /&gt;
# Discussed the priority tools for adding JSON support.&lt;br /&gt;
# Read GRASS documentation to add Python and JSON examples to the documentation.&lt;br /&gt;
|| &lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;13&amp;quot; | Official Coding Period &lt;br /&gt;
|-&lt;br /&gt;
| '''Week 1''' (June 2 - June 8) || &lt;br /&gt;
# Add JSON support for g.mapset [https://github.com/OSGeo/grass/pull/5810 #5810]&lt;br /&gt;
# Fix uninitialized zone_value in r.univar [https://github.com/OSGeo/grass/pull/5821 #5821]&lt;br /&gt;
# Add JSON support for r.what.color [https://github.com/OSGeo/grass/pull/5822 #5822]&lt;br /&gt;
# Update test file in r.info [https://github.com/OSGeo/grass/pull/5842 #5842]&lt;br /&gt;
# Improve interface for r.info [https://github.com/OSGeo/grass/pull/5859 #5859]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 2''' (June 9 - June 15) ||&lt;br /&gt;
# Add JSON support for g.version [https://github.com/OSGeo/grass/pull/5863 #5863]&lt;br /&gt;
# Add JSON support for i.group [https://github.com/OSGeo/grass/pull/5870 #5870]&lt;br /&gt;
# Add test file in r.stats [https://github.com/OSGeo/grass/pull/5879 #5879]&lt;br /&gt;
# Add tests for JSON output in r.stats [https://github.com/OSGeo/grass/pull/5892 #5892]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 3''' (June 16 - June 22) ||&lt;br /&gt;
# Update the JSON output schema of v.distance [https://github.com/OSGeo/grass/pull/5898 #5898]&lt;br /&gt;
# Fix uninitialized window variable in r.stats [https://github.com/OSGeo/grass/pull/5900 #5900]&lt;br /&gt;
# Add test file in g.list [https://github.com/OSGeo/grass/pull/5906 #5906]&lt;br /&gt;
# Add JSON support for g.list [https://github.com/OSGeo/grass/pull/5921 #5921]&lt;br /&gt;
# Update the JSON output schema of g.region [https://github.com/OSGeo/grass/pull/5929 #5929]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 4''' (June 23 - June 29) ||&lt;br /&gt;
# Update the JSON output schema of v.to.db [https://github.com/OSGeo/grass/pull/5946 #5946]&lt;br /&gt;
# Update the JSON output schema of r.profile [https://github.com/OSGeo/grass/pull/5962 #5962]&lt;br /&gt;
# Add SHELL and CSV output support for r.univar [https://github.com/OSGeo/grass/pull/5966 #5966]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 5''' (June 30 - July 6) ||&lt;br /&gt;
# Add test file in r.regression.line [https://github.com/OSGeo/grass/pull/5990 #5990]&lt;br /&gt;
# Add JSON support for r.regression.line [https://github.com/OSGeo/grass/pull/5993 #5993]&lt;br /&gt;
# Add test file in r.stats.quantile [https://github.com/OSGeo/grass/pull/6002 #6002]&lt;br /&gt;
# Add JSON support for r.stats.quantile [https://github.com/OSGeo/grass/pull/6007 #6007]&lt;br /&gt;
# Add test file in r.volume [https://github.com/OSGeo/grass/pull/6027 #6027]&lt;br /&gt;
# Add JSON support for r.volume [https://github.com/OSGeo/grass/pull/6036 #6036]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 6''' (July 7 - July 13) ||&lt;br /&gt;
# Add JSON support for db.columns [https://github.com/OSGeo/grass/pull/6042 #6042]&lt;br /&gt;
# Add test file in m.measure [https://github.com/OSGeo/grass/pull/6051 #6051]&lt;br /&gt;
# Add test file in db.connect [https://github.com/OSGeo/grass/pull/6052 #6052]&lt;br /&gt;
# Add JSON support for m.measure [https://github.com/OSGeo/grass/pull/6053 #6053]&lt;br /&gt;
# Add JSON support for db.connect [https://github.com/OSGeo/grass/pull/6059 #6059]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 7''' (July 14 - July 20) ||&lt;br /&gt;
# Add test file in r.regression.multi [https://github.com/OSGeo/grass/pull/6066 #6066]&lt;br /&gt;
# Add test file in v.db.connect [https://github.com/OSGeo/grass/pull/6067 #6067]&lt;br /&gt;
# Add JSON support for r.regression.multi [https://github.com/OSGeo/grass/pull/6075 #6075]&lt;br /&gt;
# Add JSON support for v.db.connect [https://github.com/OSGeo/grass/pull/6077 #6077]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 8''' (July 21 - July 27) ||&lt;br /&gt;
# Add JSON support for g.findfile [https://github.com/OSGeo/grass/pull/6091 #6091]&lt;br /&gt;
# Add test file in r3.info [https://github.com/OSGeo/grass/pull/6098 #6098]&lt;br /&gt;
# Add JSON support for r3.info [https://github.com/OSGeo/grass/pull/6103 #6103]&lt;br /&gt;
# Add test file in v.what.rast [https://github.com/OSGeo/grass/pull/6109 #6109]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 9''' (July 28 - August 3) ||&lt;br /&gt;
# Update format to CSV instead of shell in v.category [https://github.com/OSGeo/grass/pull/6132 #6132]&lt;br /&gt;
# Add CSV output support to r.stats [https://github.com/OSGeo/grass/pull/6133 #6133]&lt;br /&gt;
# Add CSV headers to r.volume [https://github.com/OSGeo/grass/pull/6134 #6134]&lt;br /&gt;
# Add JSON support for v.what.rast [https://github.com/OSGeo/grass/pull/6140 #6140]&lt;br /&gt;
# Add CSV output support to r.profile [https://github.com/OSGeo/grass/pull/6145 #6145]&lt;br /&gt;
# Update test cases in r.distance [https://github.com/OSGeo/grass/pull/6150 #6150]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 10''' (August 4 - August 10) ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 11''' (August 11 - August 17) ||&lt;br /&gt;
# Add JSON and CSV support for r.distance [https://github.com/OSGeo/grass/pull/6204 #6204]&lt;br /&gt;
# Add more test cases in v.class [https://github.com/OSGeo/grass/pull/6205 #6205]&lt;br /&gt;
# Add JSON and CSV support for v.class [https://github.com/OSGeo/grass/pull/6210 #6210]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 12''' (August 18 - August 24) ||&lt;br /&gt;
# Update JSON output format for v.what [https://github.com/OSGeo/grass/pull/6252 #6252]&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Evaluation Period &lt;br /&gt;
|-&lt;br /&gt;
| August 25 - September 1 ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
# Submit code, final evaluation and write the final GSoC report.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Reports =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* Introduced myself on the [https://discourse.osgeo.org/t/gsoc-2025-introduction-nishant-bansal/147005 OSGeo Discourse mailing list].&lt;br /&gt;
* Created both my [https://wiki.osgeo.org/wiki/User:Nishantbansal2003 personal Wiki page] and the [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C project Wiki page], adding all necessary project-related information.&lt;br /&gt;
* Read GRASS documentation to support the addition of Python and JSON examples.&lt;br /&gt;
* Worked on the following pull requests:&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5688 #5688]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5773 #5773]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5775 #5775]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5784 #5784]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5785 #5785]&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to the g.mapset and r.what.color modules.&lt;br /&gt;
* If time permits, I will begin improving the r.info interface: [https://github.com/OSGeo/grass/issues/5793 Issue #5793]&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
'''Project Discussions and Meetings'''&lt;br /&gt;
* '''14 May 2025''': Introductory meeting discussing JSON support and overall project milestones.&lt;br /&gt;
* '''21 May 2025''': Introduction with fellow developers. Discussed priority tools, adding Python/Pandas examples, and approaches for finalizing the JSON schema for each module.&lt;br /&gt;
&lt;br /&gt;
== Week-1 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.mapset''': Added JSON output support, now you can use -p and -l flags to get JSON-formatted results.&lt;br /&gt;
* '''r.univar''': Fixed a bug causing an uninitialized zone_value.&lt;br /&gt;
* '''r.what.color''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5822 #5822])&lt;br /&gt;
* '''r.info (regression tests)''': To maintain backward compatibility while updating its interface, I added strong regression tests.&lt;br /&gt;
* '''r.info (interface improvements)''': Began improving the module’s interface. (See PR [https://github.com/OSGeo/grass/pull/5859 #5859])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.version (see issue [https://github.com/OSGeo/grass/issues/5816 #5816]).&lt;br /&gt;
* Add JSON output support to i.group (see issue [https://github.com/OSGeo/grass/issues/5815 #5815]).&lt;br /&gt;
* If time permits, write tests for r.stats (see issue [https://github.com/OSGeo/grass/issues/5814 #5814]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-2 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.version''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5863 #5863])&lt;br /&gt;
* '''i.group''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5870 #5870])&lt;br /&gt;
* '''r.stats (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats''': Added tests for JSON output; this uncovered a bug, which was fixed alongside.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.distance (see issue [https://github.com/OSGeo/grass/issues/5846 #5846]).&lt;br /&gt;
* Add JSON output support to g.list (see issue [https://github.com/OSGeo/grass/issues/5848 #5848]).&lt;br /&gt;
* If time permits, fix the JSON output format of g.region (see issue [https://github.com/OSGeo/grass/issues/5828 #5828]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-3 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.distance''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5898 #5898])&lt;br /&gt;
* '''r.stats''': Fixed a bug causing an uninitialized &amp;lt;code&amp;gt;window&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
* '''g.list (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''g.list''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5921 #5921])&lt;br /&gt;
* '''g.region''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5929 #5929])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.to.db (see issue [https://github.com/OSGeo/grass/pull/5711 #5711]).&lt;br /&gt;
* Update JSON output format and documentation of r.profile (see issue [https://github.com/OSGeo/grass/pull/5834 #5834]).&lt;br /&gt;
* If time permits, add shell and csv output formats to r.univar (see issue [https://github.com/OSGeo/grass/pull/5824 #5824]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-4 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.to.db''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5946 #5946])&lt;br /&gt;
* '''r.profile''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5962 #5962])&lt;br /&gt;
* '''r.univar''': Implemented SHELL and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/5966 #5966])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.regression.line (see issue [https://github.com/OSGeo/grass/pull/5950 #5950]).&lt;br /&gt;
* Add JSON output support to r.stats.quantile (see issue [https://github.com/OSGeo/grass/pull/5951 #5951]).&lt;br /&gt;
* Add JSON output support to r.volume (see issue [https://github.com/OSGeo/grass/pull/5949 #5949]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-5 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.line (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.line''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5993 #5993])&lt;br /&gt;
* '''r.stats.quantile (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats.quantile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6007 #6007])&lt;br /&gt;
* '''r.volume (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.volume''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6036 #6036])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to m.measure (see issue [https://github.com/OSGeo/grass/pull/6006 #6006]).&lt;br /&gt;
* Add JSON output support to db.columns (see issue [https://github.com/OSGeo/grass/pull/6008 #6008]).&lt;br /&gt;
* Add JSON output support to db.connect (see issue [https://github.com/OSGeo/grass/pull/6009 #6009]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-6 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''db.columns''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6042 #6042])&lt;br /&gt;
* '''m.measure (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''m.measure''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6053 #6053])&lt;br /&gt;
* '''db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6059 #6059])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to v.db.connect (see issue [https://github.com/OSGeo/grass/pull/6014 #6014]).&lt;br /&gt;
* Add JSON output support to r.regression.multi (see issue [https://github.com/OSGeo/grass/pull/6010 #6010]).&lt;br /&gt;
* If time permits, add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* If time permits, add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-7 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.multi (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''v.db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.multi''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6075 #6075])&lt;br /&gt;
* '''v.db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6077 #6077])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* Add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
* If time permits, add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-8 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.findfile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6091 #6091])&lt;br /&gt;
* '''r3.info (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a flag-handling bug.&lt;br /&gt;
* '''r3.info''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6103 #6103])&lt;br /&gt;
* '''v.what.rast (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a sorting bug.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
* Update format to CSV instead of shell in v.category (see issue [https://github.com/OSGeo/grass/pull/6025 #6025]).&lt;br /&gt;
* Add CSV output support to r.stats (see issue [https://github.com/OSGeo/grass/issues/5835 #5835]).&lt;br /&gt;
* If time permits, add CSV output support to r.profile (see issue [https://github.com/OSGeo/grass/issues/5958 #5958]).&lt;br /&gt;
* If time permits, add CSV headers to r.volume (see issue [https://github.com/OSGeo/grass/issues/6049 #6049]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I don’t have any blockers this week. However, I’ll be a little busy with some personal work from August 3 to August 10, so I’ll try to complete next week’s tasks this week itself.&lt;br /&gt;
&lt;br /&gt;
== Week-9 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.category''': Updated format to CSV instead of shell. (See PR [https://github.com/OSGeo/grass/pull/6132 #6132])&lt;br /&gt;
* '''r.stats''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6133 #6133])&lt;br /&gt;
* '''r.volume''': Implemented CSV column headers support. (See PR [https://github.com/OSGeo/grass/pull/6134 #6134])&lt;br /&gt;
* '''v.what.rast''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6140 #6140])&lt;br /&gt;
* '''r.profile''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6145 #6145])&lt;br /&gt;
* '''r.distance (regression tests)''': Updated regression tests to ensure backward compatibility with new JSON support. (See PR [https://github.com/OSGeo/grass/pull/6150 #6150])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* I’ll be a bit busy with some personal work from August 3 to 10, so I completed next week’s tasks last week itself. I’ve already informed my mentors about my limited availability.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* Yes, I’ll be a bit busy with some personal work from August 3 to 10.&lt;br /&gt;
&lt;br /&gt;
== Week-10 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* This week I was busy with some personal work, so I did not complete any additional tasks. However, I had already finished this week’s tasks last week. This week, I mostly focused on handling reviews for those PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.distance (see issue [https://github.com/OSGeo/grass/issues/6135 #6135]).&lt;br /&gt;
* Add JSON output support to v.class (see issue [https://github.com/OSGeo/grass/issues/6136 #6136]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-11 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.distance''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6204 #6204])&lt;br /&gt;
* '''v.class''': Updated regression tests to ensure backward compatibility with new JSON support and fixed a out-of-bounds bug. (See PR [https://github.com/OSGeo/grass/pull/6205 #6205])&lt;br /&gt;
* '''v.class''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6210 #6210])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Discuss next week’s tasks with my mentors, if no issues are assigned, I’ll identify tools that currently lack JSON support and evaluate which ones are feasible to add it to.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-12 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.what''': Update JSON output format. (See PR [https://github.com/OSGeo/grass/pull/6252 #6252])&lt;br /&gt;
* Addressed review comments on my open PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
= Final Report =&lt;br /&gt;
&lt;br /&gt;
== Title ==&lt;br /&gt;
Add JSON output to different tools in C for GRASS&lt;br /&gt;
&lt;br /&gt;
== Organization ==&lt;br /&gt;
OSGeo (Open Source Geospatial Foundation)&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
During my GSoC project, I addressed the challenge that most GRASS tools produced only plain text output, forcing users to write custom parsing code for Python-based workflows. The task was to make these tools more data-science friendly by adding structured output formats. To achieve this, I extended the use of the Parson library to implement consistent JSON output across multiple modules, refined the JSON structure introduced in the previous GSoC, and added optional support for SHELL and CSV outputs where appropriate. I developed comprehensive Python test cases, ensured backward compatibility, and provided documentation with practical examples such as loading JSON into pandas. As a result, GRASS users can now directly consume structured outputs in modern workflows, reducing parsing overhead, improving interoperability, and paving the way for broader adoption of GRASS in data science contexts.&lt;br /&gt;
&lt;br /&gt;
== The state of integration BEFORE the start of GSoC ==&lt;br /&gt;
&lt;br /&gt;
== The state of integration AFTER GSoC ==&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
&lt;br /&gt;
== Log of Pull Requests ==&lt;br /&gt;
Below is a list of pull requests submitted to the GRASS repository during GSoC 2025:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pull Request !! Description  !! Date   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5688 #5688] || r.univar: Fix JSON structure || May 20, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5773 #5773] || r.what.color: Add test file || May 25, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5775 #5775] || g.mapset: Add test file || May 26, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5784 #5784] || r.info: Add Python example || May 28, 2025  || Closed&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5785 #5785] || g.region: Add Python example || May 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5810 #5810] || g.mapset: Add JSON support || June 2, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5821 #5821] || r.univar: Fix uninitialized zone_value || June 3, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5822 #5822] || r.what.color: Add JSON support || June 3, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5842 #5842] || r.info: Update test file || June 5, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5859 #5859] || r.info: Improve interface || June 7, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5863 #5863] || g.version: Add JSON support || June 9, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5870 #5870] || i.group: Add JSON support || June 10, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5879 #5879] || r.stats: Add test file || June 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5892 #5892] || r.stats: Add tests for JSON output || June 14, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5898 #5898] || v.distance: Update JSON format || June 16, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5900 #5900] || r.stats: fix uninitialised window value || June 17, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5906 #5906] || g.list: Add test file || June 17, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5921 #5921] || g.list: Add JSON support || June 20, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5929 #5929] || g.region: Update JSON format || June 21, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5946 #5946] || v.to.db: Update JSON format || June 23, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5962 #5962] || r.profile: Update JSON format || June 25, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5966 #5966] || r.univar: Add shell and CSV format || June 25, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5990 #5990] || r.regression.line: Add test file || June 30, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5993 #5993] || r.regression.line: Add JSON support || June 30, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6002 #6002] || r.stats.quantile: Add test file || July 1, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6007 #6007] || r.stats.quantile: Add JSON support || July 1, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6027 #6027] || r.volume: Add test file || July 4, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6036 #6036] || r.volume: Add JSON support || July 6, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6042 #6042] || db.columns: Add JSON support || July 7, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6051 #6051] || m.measure: Add test file || July 10, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6052 #6052] || db.connect: Add test file || July 10, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6053 #6053] || m.measure: Add JSON support || July 11, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6059 #6059] || db.connect: Add JSON support || July 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6066 #6066] || r.regression.multi: Add test file || July 15, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6067 #6067] || v.db.connect: Add test file || July 15, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6075 #6075] || r.regression.multi: Add JSON support || July 18, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6077 #6077] || v.db.connect: Add JSON support || July 19, 2025  || Open&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6091 #6091] || g.findfile: Add JSON support || July 21, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6098 #6098] || r3.info: Add test file || July 22, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6103 #6103] || r3.info: Add JSON support || July 23, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6109 #6109] || v.what.rast: Add test file || July 24, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6132 #6132] || v.category: Use CSV format instead of shell format || July 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6133 #6133] || r.stats: add CSV support || July 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6134 #6134] || r.volume: add csv column headers || July 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6140 #6140] || v.what.rast: Add JSON support || July 29, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6145 #6145] || r.profile: Add CSV support || July 30, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6150 #6150] || r.distance: Update existing test cases || August 1, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6204 #6204] || r.distance: Add JSON and CSV support || August 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6205 #6205] || v.class: Add more test cases and fix out-of-bounds bug || August 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6210 #6210] || v.class: Add JSON and CSV support || August 15, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6252 #6252] || v.what: Update JSON output format || August 23, 2025  || Open&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Ttile&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| OSGeo Wiki Page&lt;br /&gt;
| [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C Add JSON output to different tools in C for GRASS]&lt;br /&gt;
|-&lt;br /&gt;
| Github Fork&lt;br /&gt;
| [https://github.com/NishantBansal2003/grass GitHub Fork]&lt;br /&gt;
|-&lt;br /&gt;
| GSoC Page&lt;br /&gt;
| [https://summerofcode.withgoogle.com/programs/2025/projects/GPVGd3DH Link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples &amp;amp; Images ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{GSoC}}&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28652</id>
		<title>GRASS GSoC 2025 Add JSON output to different tools in C</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28652"/>
		<updated>2025-08-23T12:48:36Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Nishant Bansal&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo - Open Source Geospatial Foundation]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/NishantBansal2003/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''GSoC proposal''' || [https://docs.google.com/document/d/1ZPQ9RXU7b_RUDmBmAMeK7ZjFAV1WC7Urd1Zlz678jyw/edit?tab=t.0#heading=h.z6ne0og04bp5 View Proposal]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Abstract =&lt;br /&gt;
Currently, most GRASS tools produce data in plain text by default. This means that users who want to process the output in Python need to create custom parsing code. To make this easier, several modules could be improved by oﬀering JSON as an alternative output format. Recently, the Parson library was added to the GRASS codebase to support JSON output in addition to plain text. Building on the advancements made during the last GSoC, my project aims to expand JSON output capabilities to more tools using the Parson library. I will also work on making the JSON structure introduced in the previous GSoC more useful and consistent. Additionally, I plan to add support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
&lt;br /&gt;
# Working with mentors to finalize the structure of the JSON output.&lt;br /&gt;
# Adding an option to choose the output format (plain text or JSON) for each updated tool.&lt;br /&gt;
# Make the JSON structure introduced during the last GSoC more useful and consistent across tools.&lt;br /&gt;
# Developing Python test cases to ensure that the JSON output works correctly and to avoid future issues.&lt;br /&gt;
# Providing basic documentation and example JSON outputs for each modified tool.&lt;br /&gt;
# Adding support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
# Develop simple examples demonstrating how to use JSON output in a data science workflow, such as reading JSON data into pandas or python.&lt;br /&gt;
&lt;br /&gt;
= Timeline =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Period !! Timeline  !! Tasks   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period &lt;br /&gt;
||&lt;br /&gt;
May 8 - June 1  &lt;br /&gt;
|| &lt;br /&gt;
# Reviewed the work done during the last GSoC to stabilize the JSON output.&lt;br /&gt;
# Discussed the priority tools for adding JSON support.&lt;br /&gt;
# Read GRASS documentation to add Python and JSON examples to the documentation.&lt;br /&gt;
|| &lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;13&amp;quot; | Official Coding Period &lt;br /&gt;
|-&lt;br /&gt;
| '''Week 1''' (June 2 - June 8) || &lt;br /&gt;
# Add JSON support for g.mapset [https://github.com/OSGeo/grass/pull/5810 #5810]&lt;br /&gt;
# Fix uninitialized zone_value in r.univar [https://github.com/OSGeo/grass/pull/5821 #5821]&lt;br /&gt;
# Add JSON support for r.what.color [https://github.com/OSGeo/grass/pull/5822 #5822]&lt;br /&gt;
# Update test file in r.info [https://github.com/OSGeo/grass/pull/5842 #5842]&lt;br /&gt;
# Improve interface for r.info [https://github.com/OSGeo/grass/pull/5859 #5859]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 2''' (June 9 - June 15) ||&lt;br /&gt;
# Add JSON support for g.version [https://github.com/OSGeo/grass/pull/5863 #5863]&lt;br /&gt;
# Add JSON support for i.group [https://github.com/OSGeo/grass/pull/5870 #5870]&lt;br /&gt;
# Add test file in r.stats [https://github.com/OSGeo/grass/pull/5879 #5879]&lt;br /&gt;
# Add tests for JSON output in r.stats [https://github.com/OSGeo/grass/pull/5892 #5892]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 3''' (June 16 - June 22) ||&lt;br /&gt;
# Update the JSON output schema of v.distance [https://github.com/OSGeo/grass/pull/5898 #5898]&lt;br /&gt;
# Fix uninitialized window variable in r.stats [https://github.com/OSGeo/grass/pull/5900 #5900]&lt;br /&gt;
# Add test file in g.list [https://github.com/OSGeo/grass/pull/5906 #5906]&lt;br /&gt;
# Add JSON support for g.list [https://github.com/OSGeo/grass/pull/5921 #5921]&lt;br /&gt;
# Update the JSON output schema of g.region [https://github.com/OSGeo/grass/pull/5929 #5929]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 4''' (June 23 - June 29) ||&lt;br /&gt;
# Update the JSON output schema of v.to.db [https://github.com/OSGeo/grass/pull/5946 #5946]&lt;br /&gt;
# Update the JSON output schema of r.profile [https://github.com/OSGeo/grass/pull/5962 #5962]&lt;br /&gt;
# Add SHELL and CSV output support for r.univar [https://github.com/OSGeo/grass/pull/5966 #5966]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 5''' (June 30 - July 6) ||&lt;br /&gt;
# Add test file in r.regression.line [https://github.com/OSGeo/grass/pull/5990 #5990]&lt;br /&gt;
# Add JSON support for r.regression.line [https://github.com/OSGeo/grass/pull/5993 #5993]&lt;br /&gt;
# Add test file in r.stats.quantile [https://github.com/OSGeo/grass/pull/6002 #6002]&lt;br /&gt;
# Add JSON support for r.stats.quantile [https://github.com/OSGeo/grass/pull/6007 #6007]&lt;br /&gt;
# Add test file in r.volume [https://github.com/OSGeo/grass/pull/6027 #6027]&lt;br /&gt;
# Add JSON support for r.volume [https://github.com/OSGeo/grass/pull/6036 #6036]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 6''' (July 7 - July 13) ||&lt;br /&gt;
# Add JSON support for db.columns [https://github.com/OSGeo/grass/pull/6042 #6042]&lt;br /&gt;
# Add test file in m.measure [https://github.com/OSGeo/grass/pull/6051 #6051]&lt;br /&gt;
# Add test file in db.connect [https://github.com/OSGeo/grass/pull/6052 #6052]&lt;br /&gt;
# Add JSON support for m.measure [https://github.com/OSGeo/grass/pull/6053 #6053]&lt;br /&gt;
# Add JSON support for db.connect [https://github.com/OSGeo/grass/pull/6059 #6059]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 7''' (July 14 - July 20) ||&lt;br /&gt;
# Add test file in r.regression.multi [https://github.com/OSGeo/grass/pull/6066 #6066]&lt;br /&gt;
# Add test file in v.db.connect [https://github.com/OSGeo/grass/pull/6067 #6067]&lt;br /&gt;
# Add JSON support for r.regression.multi [https://github.com/OSGeo/grass/pull/6075 #6075]&lt;br /&gt;
# Add JSON support for v.db.connect [https://github.com/OSGeo/grass/pull/6077 #6077]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 8''' (July 21 - July 27) ||&lt;br /&gt;
# Add JSON support for g.findfile [https://github.com/OSGeo/grass/pull/6091 #6091]&lt;br /&gt;
# Add test file in r3.info [https://github.com/OSGeo/grass/pull/6098 #6098]&lt;br /&gt;
# Add JSON support for r3.info [https://github.com/OSGeo/grass/pull/6103 #6103]&lt;br /&gt;
# Add test file in v.what.rast [https://github.com/OSGeo/grass/pull/6109 #6109]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 9''' (July 28 - August 3) ||&lt;br /&gt;
# Update format to CSV instead of shell in v.category [https://github.com/OSGeo/grass/pull/6132 #6132]&lt;br /&gt;
# Add CSV output support to r.stats [https://github.com/OSGeo/grass/pull/6133 #6133]&lt;br /&gt;
# Add CSV headers to r.volume [https://github.com/OSGeo/grass/pull/6134 #6134]&lt;br /&gt;
# Add JSON support for v.what.rast [https://github.com/OSGeo/grass/pull/6140 #6140]&lt;br /&gt;
# Add CSV output support to r.profile [https://github.com/OSGeo/grass/pull/6145 #6145]&lt;br /&gt;
# Update test cases in r.distance [https://github.com/OSGeo/grass/pull/6150 #6150]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 10''' (August 4 - August 10) ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 11''' (August 11 - August 17) ||&lt;br /&gt;
# Add JSON and CSV support for r.distance [https://github.com/OSGeo/grass/pull/6204 #6204]&lt;br /&gt;
# Add more test cases in v.class [https://github.com/OSGeo/grass/pull/6205 #6205]&lt;br /&gt;
# Add JSON and CSV support for v.class [https://github.com/OSGeo/grass/pull/6210 #6210]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 12''' (August 18 - August 24) ||&lt;br /&gt;
# Update JSON output format for v.what [https://github.com/OSGeo/grass/pull/6252 #6252]&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Evaluation Period &lt;br /&gt;
|-&lt;br /&gt;
| August 25 - September 1 ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
# Submit code, final evaluation and write the final GSoC report.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Reports =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* Introduced myself on the [https://discourse.osgeo.org/t/gsoc-2025-introduction-nishant-bansal/147005 OSGeo Discourse mailing list].&lt;br /&gt;
* Created both my [https://wiki.osgeo.org/wiki/User:Nishantbansal2003 personal Wiki page] and the [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C project Wiki page], adding all necessary project-related information.&lt;br /&gt;
* Read GRASS documentation to support the addition of Python and JSON examples.&lt;br /&gt;
* Worked on the following pull requests:&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5688 #5688]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5773 #5773]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5775 #5775]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5784 #5784]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5785 #5785]&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to the g.mapset and r.what.color modules.&lt;br /&gt;
* If time permits, I will begin improving the r.info interface: [https://github.com/OSGeo/grass/issues/5793 Issue #5793]&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
'''Project Discussions and Meetings'''&lt;br /&gt;
* '''14 May 2025''': Introductory meeting discussing JSON support and overall project milestones.&lt;br /&gt;
* '''21 May 2025''': Introduction with fellow developers. Discussed priority tools, adding Python/Pandas examples, and approaches for finalizing the JSON schema for each module.&lt;br /&gt;
&lt;br /&gt;
== Week-1 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.mapset''': Added JSON output support, now you can use -p and -l flags to get JSON-formatted results.&lt;br /&gt;
* '''r.univar''': Fixed a bug causing an uninitialized zone_value.&lt;br /&gt;
* '''r.what.color''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5822 #5822])&lt;br /&gt;
* '''r.info (regression tests)''': To maintain backward compatibility while updating its interface, I added strong regression tests.&lt;br /&gt;
* '''r.info (interface improvements)''': Began improving the module’s interface. (See PR [https://github.com/OSGeo/grass/pull/5859 #5859])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.version (see issue [https://github.com/OSGeo/grass/issues/5816 #5816]).&lt;br /&gt;
* Add JSON output support to i.group (see issue [https://github.com/OSGeo/grass/issues/5815 #5815]).&lt;br /&gt;
* If time permits, write tests for r.stats (see issue [https://github.com/OSGeo/grass/issues/5814 #5814]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-2 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.version''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5863 #5863])&lt;br /&gt;
* '''i.group''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5870 #5870])&lt;br /&gt;
* '''r.stats (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats''': Added tests for JSON output; this uncovered a bug, which was fixed alongside.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.distance (see issue [https://github.com/OSGeo/grass/issues/5846 #5846]).&lt;br /&gt;
* Add JSON output support to g.list (see issue [https://github.com/OSGeo/grass/issues/5848 #5848]).&lt;br /&gt;
* If time permits, fix the JSON output format of g.region (see issue [https://github.com/OSGeo/grass/issues/5828 #5828]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-3 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.distance''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5898 #5898])&lt;br /&gt;
* '''r.stats''': Fixed a bug causing an uninitialized &amp;lt;code&amp;gt;window&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
* '''g.list (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''g.list''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5921 #5921])&lt;br /&gt;
* '''g.region''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5929 #5929])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.to.db (see issue [https://github.com/OSGeo/grass/pull/5711 #5711]).&lt;br /&gt;
* Update JSON output format and documentation of r.profile (see issue [https://github.com/OSGeo/grass/pull/5834 #5834]).&lt;br /&gt;
* If time permits, add shell and csv output formats to r.univar (see issue [https://github.com/OSGeo/grass/pull/5824 #5824]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-4 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.to.db''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5946 #5946])&lt;br /&gt;
* '''r.profile''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5962 #5962])&lt;br /&gt;
* '''r.univar''': Implemented SHELL and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/5966 #5966])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.regression.line (see issue [https://github.com/OSGeo/grass/pull/5950 #5950]).&lt;br /&gt;
* Add JSON output support to r.stats.quantile (see issue [https://github.com/OSGeo/grass/pull/5951 #5951]).&lt;br /&gt;
* Add JSON output support to r.volume (see issue [https://github.com/OSGeo/grass/pull/5949 #5949]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-5 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.line (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.line''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5993 #5993])&lt;br /&gt;
* '''r.stats.quantile (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats.quantile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6007 #6007])&lt;br /&gt;
* '''r.volume (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.volume''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6036 #6036])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to m.measure (see issue [https://github.com/OSGeo/grass/pull/6006 #6006]).&lt;br /&gt;
* Add JSON output support to db.columns (see issue [https://github.com/OSGeo/grass/pull/6008 #6008]).&lt;br /&gt;
* Add JSON output support to db.connect (see issue [https://github.com/OSGeo/grass/pull/6009 #6009]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-6 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''db.columns''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6042 #6042])&lt;br /&gt;
* '''m.measure (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''m.measure''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6053 #6053])&lt;br /&gt;
* '''db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6059 #6059])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to v.db.connect (see issue [https://github.com/OSGeo/grass/pull/6014 #6014]).&lt;br /&gt;
* Add JSON output support to r.regression.multi (see issue [https://github.com/OSGeo/grass/pull/6010 #6010]).&lt;br /&gt;
* If time permits, add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* If time permits, add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-7 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.multi (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''v.db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.multi''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6075 #6075])&lt;br /&gt;
* '''v.db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6077 #6077])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* Add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
* If time permits, add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-8 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.findfile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6091 #6091])&lt;br /&gt;
* '''r3.info (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a flag-handling bug.&lt;br /&gt;
* '''r3.info''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6103 #6103])&lt;br /&gt;
* '''v.what.rast (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a sorting bug.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
* Update format to CSV instead of shell in v.category (see issue [https://github.com/OSGeo/grass/pull/6025 #6025]).&lt;br /&gt;
* Add CSV output support to r.stats (see issue [https://github.com/OSGeo/grass/issues/5835 #5835]).&lt;br /&gt;
* If time permits, add CSV output support to r.profile (see issue [https://github.com/OSGeo/grass/issues/5958 #5958]).&lt;br /&gt;
* If time permits, add CSV headers to r.volume (see issue [https://github.com/OSGeo/grass/issues/6049 #6049]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I don’t have any blockers this week. However, I’ll be a little busy with some personal work from August 3 to August 10, so I’ll try to complete next week’s tasks this week itself.&lt;br /&gt;
&lt;br /&gt;
== Week-9 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.category''': Updated format to CSV instead of shell. (See PR [https://github.com/OSGeo/grass/pull/6132 #6132])&lt;br /&gt;
* '''r.stats''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6133 #6133])&lt;br /&gt;
* '''r.volume''': Implemented CSV column headers support. (See PR [https://github.com/OSGeo/grass/pull/6134 #6134])&lt;br /&gt;
* '''v.what.rast''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6140 #6140])&lt;br /&gt;
* '''r.profile''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6145 #6145])&lt;br /&gt;
* '''r.distance (regression tests)''': Updated regression tests to ensure backward compatibility with new JSON support. (See PR [https://github.com/OSGeo/grass/pull/6150 #6150])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* I’ll be a bit busy with some personal work from August 3 to 10, so I completed next week’s tasks last week itself. I’ve already informed my mentors about my limited availability.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* Yes, I’ll be a bit busy with some personal work from August 3 to 10.&lt;br /&gt;
&lt;br /&gt;
== Week-10 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* This week I was busy with some personal work, so I did not complete any additional tasks. However, I had already finished this week’s tasks last week. This week, I mostly focused on handling reviews for those PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.distance (see issue [https://github.com/OSGeo/grass/issues/6135 #6135]).&lt;br /&gt;
* Add JSON output support to v.class (see issue [https://github.com/OSGeo/grass/issues/6136 #6136]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-11 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.distance''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6204 #6204])&lt;br /&gt;
* '''v.class''': Updated regression tests to ensure backward compatibility with new JSON support and fixed a out-of-bounds bug. (See PR [https://github.com/OSGeo/grass/pull/6205 #6205])&lt;br /&gt;
* '''v.class''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6210 #6210])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Discuss next week’s tasks with my mentors, if no issues are assigned, I’ll identify tools that currently lack JSON support and evaluate which ones are feasible to add it to.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-12 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.what''': Update JSON output format. (See PR [https://github.com/OSGeo/grass/pull/6252 #6252])&lt;br /&gt;
* Addressed review comments on my open PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
= Final Report =&lt;br /&gt;
&lt;br /&gt;
== Title ==&lt;br /&gt;
Add JSON output to different tools in C for GRASS&lt;br /&gt;
&lt;br /&gt;
== Organization ==&lt;br /&gt;
OSGeo (Open Source Geospatial Foundation)&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
&lt;br /&gt;
== The state of integration BEFORE the start of GSoC ==&lt;br /&gt;
&lt;br /&gt;
== The state of integration AFTER GSoC ==&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
&lt;br /&gt;
== Log of Pull Requests ==&lt;br /&gt;
Below is a list of pull requests submitted to the GRASS repository during GSoC 2025:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pull Request !! Description  !! Date   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5688 #5688] || r.univar: Fix JSON structure || May 20, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5773 #5773] || r.what.color: Add test file || May 25, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5775 #5775] || g.mapset: Add test file || May 26, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5784 #5784] || r.info: Add Python example || May 28, 2025  || Closed&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5785 #5785] || g.region: Add Python example || May 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5810 #5810] || g.mapset: Add JSON support || June 2, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5821 #5821] || r.univar: Fix uninitialized zone_value || June 3, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5822 #5822] || r.what.color: Add JSON support || June 3, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5842 #5842] || r.info: Update test file || June 5, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5859 #5859] || r.info: Improve interface || June 7, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5863 #5863] || g.version: Add JSON support || June 9, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5870 #5870] || i.group: Add JSON support || June 10, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5879 #5879] || r.stats: Add test file || June 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5892 #5892] || r.stats: Add tests for JSON output || June 14, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5898 #5898] || v.distance: Update JSON format || June 16, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5900 #5900] || r.stats: fix uninitialised window value || June 17, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5906 #5906] || g.list: Add test file || June 17, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5921 #5921] || g.list: Add JSON support || June 20, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5929 #5929] || g.region: Update JSON format || June 21, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5946 #5946] || v.to.db: Update JSON format || June 23, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5962 #5962] || r.profile: Update JSON format || June 25, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5966 #5966] || r.univar: Add shell and CSV format || June 25, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5990 #5990] || r.regression.line: Add test file || June 30, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5993 #5993] || r.regression.line: Add JSON support || June 30, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6002 #6002] || r.stats.quantile: Add test file || July 1, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6007 #6007] || r.stats.quantile: Add JSON support || July 1, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6027 #6027] || r.volume: Add test file || July 4, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6036 #6036] || r.volume: Add JSON support || July 6, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6042 #6042] || db.columns: Add JSON support || July 7, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6051 #6051] || m.measure: Add test file || July 10, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6052 #6052] || db.connect: Add test file || July 10, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6053 #6053] || m.measure: Add JSON support || July 11, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6059 #6059] || db.connect: Add JSON support || July 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6066 #6066] || r.regression.multi: Add test file || July 15, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6067 #6067] || v.db.connect: Add test file || July 15, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6075 #6075] || r.regression.multi: Add JSON support || July 18, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6077 #6077] || v.db.connect: Add JSON support || July 19, 2025  || Open&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6091 #6091] || g.findfile: Add JSON support || July 21, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6098 #6098] || r3.info: Add test file || July 22, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6103 #6103] || r3.info: Add JSON support || July 23, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6109 #6109] || v.what.rast: Add test file || July 24, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6132 #6132] || v.category: Use CSV format instead of shell format || July 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6133 #6133] || r.stats: add CSV support || July 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6134 #6134] || r.volume: add csv column headers || July 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6140 #6140] || v.what.rast: Add JSON support || July 29, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6145 #6145] || r.profile: Add CSV support || July 30, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6150 #6150] || r.distance: Update existing test cases || August 1, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6204 #6204] || r.distance: Add JSON and CSV support || August 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6205 #6205] || v.class: Add more test cases and fix out-of-bounds bug || August 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6210 #6210] || v.class: Add JSON and CSV support || August 15, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6252 #6252] || v.what: Update JSON output format || August 23, 2025  || Open&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Ttile&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| OSGeo Wiki Page&lt;br /&gt;
| [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C Add JSON output to different tools in C for GRASS]&lt;br /&gt;
|-&lt;br /&gt;
| Github Fork&lt;br /&gt;
| [https://github.com/NishantBansal2003/grass GitHub Fork]&lt;br /&gt;
|-&lt;br /&gt;
| GSoC Page&lt;br /&gt;
| [https://summerofcode.withgoogle.com/programs/2025/projects/GPVGd3DH Link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples &amp;amp; Images ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{GSoC}}&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28651</id>
		<title>GRASS GSoC 2025 Add JSON output to different tools in C</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28651"/>
		<updated>2025-08-23T12:38:57Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: /* Organization */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Nishant Bansal&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo - Open Source Geospatial Foundation]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/NishantBansal2003/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''GSoC proposal''' || [https://docs.google.com/document/d/1ZPQ9RXU7b_RUDmBmAMeK7ZjFAV1WC7Urd1Zlz678jyw/edit?tab=t.0#heading=h.z6ne0og04bp5 View Proposal]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Abstract =&lt;br /&gt;
Currently, most GRASS tools produce data in plain text by default. This means that users who want to process the output in Python need to create custom parsing code. To make this easier, several modules could be improved by oﬀering JSON as an alternative output format. Recently, the Parson library was added to the GRASS codebase to support JSON output in addition to plain text. Building on the advancements made during the last GSoC, my project aims to expand JSON output capabilities to more tools using the Parson library. I will also work on making the JSON structure introduced in the previous GSoC more useful and consistent. Additionally, I plan to add support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
&lt;br /&gt;
# Working with mentors to finalize the structure of the JSON output.&lt;br /&gt;
# Adding an option to choose the output format (plain text or JSON) for each updated tool.&lt;br /&gt;
# Make the JSON structure introduced during the last GSoC more useful and consistent across tools.&lt;br /&gt;
# Developing Python test cases to ensure that the JSON output works correctly and to avoid future issues.&lt;br /&gt;
# Providing basic documentation and example JSON outputs for each modified tool.&lt;br /&gt;
# Adding support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
# Develop simple examples demonstrating how to use JSON output in a data science workflow, such as reading JSON data into pandas or python.&lt;br /&gt;
&lt;br /&gt;
= Timeline =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Period !! Timeline  !! Tasks   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period &lt;br /&gt;
||&lt;br /&gt;
May 8 - June 1  &lt;br /&gt;
|| &lt;br /&gt;
# Reviewed the work done during the last GSoC to stabilize the JSON output.&lt;br /&gt;
# Discussed the priority tools for adding JSON support.&lt;br /&gt;
# Read GRASS documentation to add Python and JSON examples to the documentation.&lt;br /&gt;
|| &lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;13&amp;quot; | Official Coding Period &lt;br /&gt;
|-&lt;br /&gt;
| '''Week 1''' (June 2 - June 8) || &lt;br /&gt;
# Add JSON support for g.mapset [https://github.com/OSGeo/grass/pull/5810 #5810]&lt;br /&gt;
# Fix uninitialized zone_value in r.univar [https://github.com/OSGeo/grass/pull/5821 #5821]&lt;br /&gt;
# Add JSON support for r.what.color [https://github.com/OSGeo/grass/pull/5822 #5822]&lt;br /&gt;
# Update test file in r.info [https://github.com/OSGeo/grass/pull/5842 #5842]&lt;br /&gt;
# Improve interface for r.info [https://github.com/OSGeo/grass/pull/5859 #5859]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 2''' (June 9 - June 15) ||&lt;br /&gt;
# Add JSON support for g.version [https://github.com/OSGeo/grass/pull/5863 #5863]&lt;br /&gt;
# Add JSON support for i.group [https://github.com/OSGeo/grass/pull/5870 #5870]&lt;br /&gt;
# Add test file in r.stats [https://github.com/OSGeo/grass/pull/5879 #5879]&lt;br /&gt;
# Add tests for JSON output in r.stats [https://github.com/OSGeo/grass/pull/5892 #5892]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 3''' (June 16 - June 22) ||&lt;br /&gt;
# Update the JSON output schema of v.distance [https://github.com/OSGeo/grass/pull/5898 #5898]&lt;br /&gt;
# Fix uninitialized window variable in r.stats [https://github.com/OSGeo/grass/pull/5900 #5900]&lt;br /&gt;
# Add test file in g.list [https://github.com/OSGeo/grass/pull/5906 #5906]&lt;br /&gt;
# Add JSON support for g.list [https://github.com/OSGeo/grass/pull/5921 #5921]&lt;br /&gt;
# Update the JSON output schema of g.region [https://github.com/OSGeo/grass/pull/5929 #5929]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 4''' (June 23 - June 29) ||&lt;br /&gt;
# Update the JSON output schema of v.to.db [https://github.com/OSGeo/grass/pull/5946 #5946]&lt;br /&gt;
# Update the JSON output schema of r.profile [https://github.com/OSGeo/grass/pull/5962 #5962]&lt;br /&gt;
# Add SHELL and CSV output support for r.univar [https://github.com/OSGeo/grass/pull/5966 #5966]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 5''' (June 30 - July 6) ||&lt;br /&gt;
# Add test file in r.regression.line [https://github.com/OSGeo/grass/pull/5990 #5990]&lt;br /&gt;
# Add JSON support for r.regression.line [https://github.com/OSGeo/grass/pull/5993 #5993]&lt;br /&gt;
# Add test file in r.stats.quantile [https://github.com/OSGeo/grass/pull/6002 #6002]&lt;br /&gt;
# Add JSON support for r.stats.quantile [https://github.com/OSGeo/grass/pull/6007 #6007]&lt;br /&gt;
# Add test file in r.volume [https://github.com/OSGeo/grass/pull/6027 #6027]&lt;br /&gt;
# Add JSON support for r.volume [https://github.com/OSGeo/grass/pull/6036 #6036]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 6''' (July 7 - July 13) ||&lt;br /&gt;
# Add JSON support for db.columns [https://github.com/OSGeo/grass/pull/6042 #6042]&lt;br /&gt;
# Add test file in m.measure [https://github.com/OSGeo/grass/pull/6051 #6051]&lt;br /&gt;
# Add test file in db.connect [https://github.com/OSGeo/grass/pull/6052 #6052]&lt;br /&gt;
# Add JSON support for m.measure [https://github.com/OSGeo/grass/pull/6053 #6053]&lt;br /&gt;
# Add JSON support for db.connect [https://github.com/OSGeo/grass/pull/6059 #6059]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 7''' (July 14 - July 20) ||&lt;br /&gt;
# Add test file in r.regression.multi [https://github.com/OSGeo/grass/pull/6066 #6066]&lt;br /&gt;
# Add test file in v.db.connect [https://github.com/OSGeo/grass/pull/6067 #6067]&lt;br /&gt;
# Add JSON support for r.regression.multi [https://github.com/OSGeo/grass/pull/6075 #6075]&lt;br /&gt;
# Add JSON support for v.db.connect [https://github.com/OSGeo/grass/pull/6077 #6077]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 8''' (July 21 - July 27) ||&lt;br /&gt;
# Add JSON support for g.findfile [https://github.com/OSGeo/grass/pull/6091 #6091]&lt;br /&gt;
# Add test file in r3.info [https://github.com/OSGeo/grass/pull/6098 #6098]&lt;br /&gt;
# Add JSON support for r3.info [https://github.com/OSGeo/grass/pull/6103 #6103]&lt;br /&gt;
# Add test file in v.what.rast [https://github.com/OSGeo/grass/pull/6109 #6109]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 9''' (July 28 - August 3) ||&lt;br /&gt;
# Update format to CSV instead of shell in v.category [https://github.com/OSGeo/grass/pull/6132 #6132]&lt;br /&gt;
# Add CSV output support to r.stats [https://github.com/OSGeo/grass/pull/6133 #6133]&lt;br /&gt;
# Add CSV headers to r.volume [https://github.com/OSGeo/grass/pull/6134 #6134]&lt;br /&gt;
# Add JSON support for v.what.rast [https://github.com/OSGeo/grass/pull/6140 #6140]&lt;br /&gt;
# Add CSV output support to r.profile [https://github.com/OSGeo/grass/pull/6145 #6145]&lt;br /&gt;
# Update test cases in r.distance [https://github.com/OSGeo/grass/pull/6150 #6150]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 10''' (August 4 - August 10) ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 11''' (August 11 - August 17) ||&lt;br /&gt;
# Add JSON and CSV support for r.distance [https://github.com/OSGeo/grass/pull/6204 #6204]&lt;br /&gt;
# Add more test cases in v.class [https://github.com/OSGeo/grass/pull/6205 #6205]&lt;br /&gt;
# Add JSON and CSV support for v.class [https://github.com/OSGeo/grass/pull/6210 #6210]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 12''' (August 18 - August 24) ||&lt;br /&gt;
# Update JSON output format for v.what [https://github.com/OSGeo/grass/pull/6252 #6252]&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Evaluation Period &lt;br /&gt;
|-&lt;br /&gt;
| August 25 - September 1 ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
# Submit code, final evaluation and write the final GSoC report.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Reports =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* Introduced myself on the [https://discourse.osgeo.org/t/gsoc-2025-introduction-nishant-bansal/147005 OSGeo Discourse mailing list].&lt;br /&gt;
* Created both my [https://wiki.osgeo.org/wiki/User:Nishantbansal2003 personal Wiki page] and the [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C project Wiki page], adding all necessary project-related information.&lt;br /&gt;
* Read GRASS documentation to support the addition of Python and JSON examples.&lt;br /&gt;
* Worked on the following pull requests:&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5688 #5688]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5773 #5773]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5775 #5775]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5784 #5784]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5785 #5785]&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to the g.mapset and r.what.color modules.&lt;br /&gt;
* If time permits, I will begin improving the r.info interface: [https://github.com/OSGeo/grass/issues/5793 Issue #5793]&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
'''Project Discussions and Meetings'''&lt;br /&gt;
* '''14 May 2025''': Introductory meeting discussing JSON support and overall project milestones.&lt;br /&gt;
* '''21 May 2025''': Introduction with fellow developers. Discussed priority tools, adding Python/Pandas examples, and approaches for finalizing the JSON schema for each module.&lt;br /&gt;
&lt;br /&gt;
== Week-1 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.mapset''': Added JSON output support, now you can use -p and -l flags to get JSON-formatted results.&lt;br /&gt;
* '''r.univar''': Fixed a bug causing an uninitialized zone_value.&lt;br /&gt;
* '''r.what.color''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5822 #5822])&lt;br /&gt;
* '''r.info (regression tests)''': To maintain backward compatibility while updating its interface, I added strong regression tests.&lt;br /&gt;
* '''r.info (interface improvements)''': Began improving the module’s interface. (See PR [https://github.com/OSGeo/grass/pull/5859 #5859])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.version (see issue [https://github.com/OSGeo/grass/issues/5816 #5816]).&lt;br /&gt;
* Add JSON output support to i.group (see issue [https://github.com/OSGeo/grass/issues/5815 #5815]).&lt;br /&gt;
* If time permits, write tests for r.stats (see issue [https://github.com/OSGeo/grass/issues/5814 #5814]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-2 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.version''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5863 #5863])&lt;br /&gt;
* '''i.group''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5870 #5870])&lt;br /&gt;
* '''r.stats (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats''': Added tests for JSON output; this uncovered a bug, which was fixed alongside.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.distance (see issue [https://github.com/OSGeo/grass/issues/5846 #5846]).&lt;br /&gt;
* Add JSON output support to g.list (see issue [https://github.com/OSGeo/grass/issues/5848 #5848]).&lt;br /&gt;
* If time permits, fix the JSON output format of g.region (see issue [https://github.com/OSGeo/grass/issues/5828 #5828]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-3 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.distance''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5898 #5898])&lt;br /&gt;
* '''r.stats''': Fixed a bug causing an uninitialized &amp;lt;code&amp;gt;window&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
* '''g.list (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''g.list''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5921 #5921])&lt;br /&gt;
* '''g.region''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5929 #5929])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.to.db (see issue [https://github.com/OSGeo/grass/pull/5711 #5711]).&lt;br /&gt;
* Update JSON output format and documentation of r.profile (see issue [https://github.com/OSGeo/grass/pull/5834 #5834]).&lt;br /&gt;
* If time permits, add shell and csv output formats to r.univar (see issue [https://github.com/OSGeo/grass/pull/5824 #5824]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-4 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.to.db''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5946 #5946])&lt;br /&gt;
* '''r.profile''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5962 #5962])&lt;br /&gt;
* '''r.univar''': Implemented SHELL and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/5966 #5966])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.regression.line (see issue [https://github.com/OSGeo/grass/pull/5950 #5950]).&lt;br /&gt;
* Add JSON output support to r.stats.quantile (see issue [https://github.com/OSGeo/grass/pull/5951 #5951]).&lt;br /&gt;
* Add JSON output support to r.volume (see issue [https://github.com/OSGeo/grass/pull/5949 #5949]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-5 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.line (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.line''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5993 #5993])&lt;br /&gt;
* '''r.stats.quantile (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats.quantile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6007 #6007])&lt;br /&gt;
* '''r.volume (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.volume''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6036 #6036])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to m.measure (see issue [https://github.com/OSGeo/grass/pull/6006 #6006]).&lt;br /&gt;
* Add JSON output support to db.columns (see issue [https://github.com/OSGeo/grass/pull/6008 #6008]).&lt;br /&gt;
* Add JSON output support to db.connect (see issue [https://github.com/OSGeo/grass/pull/6009 #6009]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-6 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''db.columns''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6042 #6042])&lt;br /&gt;
* '''m.measure (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''m.measure''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6053 #6053])&lt;br /&gt;
* '''db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6059 #6059])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to v.db.connect (see issue [https://github.com/OSGeo/grass/pull/6014 #6014]).&lt;br /&gt;
* Add JSON output support to r.regression.multi (see issue [https://github.com/OSGeo/grass/pull/6010 #6010]).&lt;br /&gt;
* If time permits, add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* If time permits, add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-7 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.multi (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''v.db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.multi''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6075 #6075])&lt;br /&gt;
* '''v.db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6077 #6077])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* Add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
* If time permits, add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-8 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.findfile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6091 #6091])&lt;br /&gt;
* '''r3.info (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a flag-handling bug.&lt;br /&gt;
* '''r3.info''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6103 #6103])&lt;br /&gt;
* '''v.what.rast (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a sorting bug.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
* Update format to CSV instead of shell in v.category (see issue [https://github.com/OSGeo/grass/pull/6025 #6025]).&lt;br /&gt;
* Add CSV output support to r.stats (see issue [https://github.com/OSGeo/grass/issues/5835 #5835]).&lt;br /&gt;
* If time permits, add CSV output support to r.profile (see issue [https://github.com/OSGeo/grass/issues/5958 #5958]).&lt;br /&gt;
* If time permits, add CSV headers to r.volume (see issue [https://github.com/OSGeo/grass/issues/6049 #6049]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I don’t have any blockers this week. However, I’ll be a little busy with some personal work from August 3 to August 10, so I’ll try to complete next week’s tasks this week itself.&lt;br /&gt;
&lt;br /&gt;
== Week-9 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.category''': Updated format to CSV instead of shell. (See PR [https://github.com/OSGeo/grass/pull/6132 #6132])&lt;br /&gt;
* '''r.stats''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6133 #6133])&lt;br /&gt;
* '''r.volume''': Implemented CSV column headers support. (See PR [https://github.com/OSGeo/grass/pull/6134 #6134])&lt;br /&gt;
* '''v.what.rast''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6140 #6140])&lt;br /&gt;
* '''r.profile''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6145 #6145])&lt;br /&gt;
* '''r.distance (regression tests)''': Updated regression tests to ensure backward compatibility with new JSON support. (See PR [https://github.com/OSGeo/grass/pull/6150 #6150])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* I’ll be a bit busy with some personal work from August 3 to 10, so I completed next week’s tasks last week itself. I’ve already informed my mentors about my limited availability.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* Yes, I’ll be a bit busy with some personal work from August 3 to 10.&lt;br /&gt;
&lt;br /&gt;
== Week-10 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* This week I was busy with some personal work, so I did not complete any additional tasks. However, I had already finished this week’s tasks last week. This week, I mostly focused on handling reviews for those PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.distance (see issue [https://github.com/OSGeo/grass/issues/6135 #6135]).&lt;br /&gt;
* Add JSON output support to v.class (see issue [https://github.com/OSGeo/grass/issues/6136 #6136]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-11 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.distance''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6204 #6204])&lt;br /&gt;
* '''v.class''': Updated regression tests to ensure backward compatibility with new JSON support and fixed a out-of-bounds bug. (See PR [https://github.com/OSGeo/grass/pull/6205 #6205])&lt;br /&gt;
* '''v.class''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6210 #6210])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Discuss next week’s tasks with my mentors, if no issues are assigned, I’ll identify tools that currently lack JSON support and evaluate which ones are feasible to add it to.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-12 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.what''': Update JSON output format. (See PR [https://github.com/OSGeo/grass/pull/6252 #6252])&lt;br /&gt;
* Addressed review comments on my open PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
= Final Report =&lt;br /&gt;
&lt;br /&gt;
== Title ==&lt;br /&gt;
Add JSON output to different tools in C for GRASS&lt;br /&gt;
&lt;br /&gt;
== Organization ==&lt;br /&gt;
OSGeo (Open Source Geospatial Foundation)&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
&lt;br /&gt;
== The state of integration BEFORE the start of GSoC ==&lt;br /&gt;
&lt;br /&gt;
== The state of integration AFTER GSoC ==&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
&lt;br /&gt;
== Log of Pull Requests ==&lt;br /&gt;
Below is a list of pull requests submitted to the GRASS repository during GSoC 2025:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pull Request !! Description  !! Date   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5688 #5688] || r.univar: Fix JSON structure || May 20, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5773 #5773] || r.what.color: Add test file || May 25, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5775 #5775] || g.mapset: Add test file || May 26, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5784 #5784] || r.info: Add Python example || May 28, 2025  || Closed&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5785 #5785] || g.region: Add Python example || May 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5810 #5810] || g.mapset: Add JSON support || June 2, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5821 #5821] || r.univar: Fix uninitialized zone_value || June 3, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5822 #5822] || r.what.color: Add JSON support || June 3, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5842 #5842] || r.info: Update test file || June 5, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5859 #5859] || r.info: Improve interface || June 7, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5863 #5863] || g.version: Add JSON support || June 9, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5870 #5870] || i.group: Add JSON support || June 10, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5879 #5879] || r.stats: Add test file || June 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5892 #5892] || r.stats: Add tests for JSON output || June 14, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5898 #5898] || v.distance: Update JSON format || June 16, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5900 #5900] || r.stats: fix uninitialised window value || June 17, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5906 #5906] || g.list: Add test file || June 17, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5921 #5921] || g.list: Add JSON support || June 20, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5929 #5929] || g.region: Update JSON format || June 21, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5946 #5946] || v.to.db: Update JSON format || June 23, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5962 #5962] || r.profile: Update JSON format || June 25, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5966 #5966] || r.univar: Add shell and CSV format || June 25, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5990 #5990] || r.regression.line: Add test file || June 30, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5993 #5993] || r.regression.line: Add JSON support || June 30, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6002 #6002] || r.stats.quantile: Add test file || July 1, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6007 #6007] || r.stats.quantile: Add JSON support || July 1, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6027 #6027] || r.volume: Add test file || July 4, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6036 #6036] || r.volume: Add JSON support || July 6, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6042 #6042] || db.columns: Add JSON support || July 7, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6051 #6051] || m.measure: Add test file || July 10, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6052 #6052] || db.connect: Add test file || July 10, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6053 #6053] || m.measure: Add JSON support || July 11, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6059 #6059] || db.connect: Add JSON support || July 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6066 #6066] || r.regression.multi: Add test file || July 15, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6067 #6067] || v.db.connect: Add test file || July 15, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6075 #6075] || r.regression.multi: Add JSON support || July 18, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6077 #6077] || v.db.connect: Add JSON support || July 19, 2025  || Open&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6091 #6091] || g.findfile: Add JSON support || July 21, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6098 #6098] || r3.info: Add test file || July 22, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6103 #6103] || r3.info: Add JSON support || July 23, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6109 #6109] || v.what.rast: Add test file || July 24, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6132 #6132] || v.category: Use CSV format instead of shell format || July 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6133 #6133] || r.stats: add CSV support || July 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6134 #6134] || r.volume: add csv column headers || July 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6140 #6140] || v.what.rast: Add JSON support || July 29, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6145 #6145] || r.profile: Add CSV support || July 30, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6150 #6150] || r.distance: Update existing test cases || August 1, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6204 #6204] || r.distance: Add JSON and CSV support || August 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6205 #6205] || v.class: Add more test cases and fix out-of-bounds bug || August 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6210 #6210] || v.class: Add JSON and CSV support || August 15, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6252 #6252] || v.what: Update JSON output format || August 23, 2025  || Open&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
== Examples &amp;amp; Images ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{GSoC}}&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28650</id>
		<title>GRASS GSoC 2025 Add JSON output to different tools in C</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28650"/>
		<updated>2025-08-23T12:38:33Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: /* Title */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Nishant Bansal&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo - Open Source Geospatial Foundation]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/NishantBansal2003/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''GSoC proposal''' || [https://docs.google.com/document/d/1ZPQ9RXU7b_RUDmBmAMeK7ZjFAV1WC7Urd1Zlz678jyw/edit?tab=t.0#heading=h.z6ne0og04bp5 View Proposal]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Abstract =&lt;br /&gt;
Currently, most GRASS tools produce data in plain text by default. This means that users who want to process the output in Python need to create custom parsing code. To make this easier, several modules could be improved by oﬀering JSON as an alternative output format. Recently, the Parson library was added to the GRASS codebase to support JSON output in addition to plain text. Building on the advancements made during the last GSoC, my project aims to expand JSON output capabilities to more tools using the Parson library. I will also work on making the JSON structure introduced in the previous GSoC more useful and consistent. Additionally, I plan to add support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
&lt;br /&gt;
# Working with mentors to finalize the structure of the JSON output.&lt;br /&gt;
# Adding an option to choose the output format (plain text or JSON) for each updated tool.&lt;br /&gt;
# Make the JSON structure introduced during the last GSoC more useful and consistent across tools.&lt;br /&gt;
# Developing Python test cases to ensure that the JSON output works correctly and to avoid future issues.&lt;br /&gt;
# Providing basic documentation and example JSON outputs for each modified tool.&lt;br /&gt;
# Adding support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
# Develop simple examples demonstrating how to use JSON output in a data science workflow, such as reading JSON data into pandas or python.&lt;br /&gt;
&lt;br /&gt;
= Timeline =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Period !! Timeline  !! Tasks   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period &lt;br /&gt;
||&lt;br /&gt;
May 8 - June 1  &lt;br /&gt;
|| &lt;br /&gt;
# Reviewed the work done during the last GSoC to stabilize the JSON output.&lt;br /&gt;
# Discussed the priority tools for adding JSON support.&lt;br /&gt;
# Read GRASS documentation to add Python and JSON examples to the documentation.&lt;br /&gt;
|| &lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;13&amp;quot; | Official Coding Period &lt;br /&gt;
|-&lt;br /&gt;
| '''Week 1''' (June 2 - June 8) || &lt;br /&gt;
# Add JSON support for g.mapset [https://github.com/OSGeo/grass/pull/5810 #5810]&lt;br /&gt;
# Fix uninitialized zone_value in r.univar [https://github.com/OSGeo/grass/pull/5821 #5821]&lt;br /&gt;
# Add JSON support for r.what.color [https://github.com/OSGeo/grass/pull/5822 #5822]&lt;br /&gt;
# Update test file in r.info [https://github.com/OSGeo/grass/pull/5842 #5842]&lt;br /&gt;
# Improve interface for r.info [https://github.com/OSGeo/grass/pull/5859 #5859]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 2''' (June 9 - June 15) ||&lt;br /&gt;
# Add JSON support for g.version [https://github.com/OSGeo/grass/pull/5863 #5863]&lt;br /&gt;
# Add JSON support for i.group [https://github.com/OSGeo/grass/pull/5870 #5870]&lt;br /&gt;
# Add test file in r.stats [https://github.com/OSGeo/grass/pull/5879 #5879]&lt;br /&gt;
# Add tests for JSON output in r.stats [https://github.com/OSGeo/grass/pull/5892 #5892]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 3''' (June 16 - June 22) ||&lt;br /&gt;
# Update the JSON output schema of v.distance [https://github.com/OSGeo/grass/pull/5898 #5898]&lt;br /&gt;
# Fix uninitialized window variable in r.stats [https://github.com/OSGeo/grass/pull/5900 #5900]&lt;br /&gt;
# Add test file in g.list [https://github.com/OSGeo/grass/pull/5906 #5906]&lt;br /&gt;
# Add JSON support for g.list [https://github.com/OSGeo/grass/pull/5921 #5921]&lt;br /&gt;
# Update the JSON output schema of g.region [https://github.com/OSGeo/grass/pull/5929 #5929]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 4''' (June 23 - June 29) ||&lt;br /&gt;
# Update the JSON output schema of v.to.db [https://github.com/OSGeo/grass/pull/5946 #5946]&lt;br /&gt;
# Update the JSON output schema of r.profile [https://github.com/OSGeo/grass/pull/5962 #5962]&lt;br /&gt;
# Add SHELL and CSV output support for r.univar [https://github.com/OSGeo/grass/pull/5966 #5966]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 5''' (June 30 - July 6) ||&lt;br /&gt;
# Add test file in r.regression.line [https://github.com/OSGeo/grass/pull/5990 #5990]&lt;br /&gt;
# Add JSON support for r.regression.line [https://github.com/OSGeo/grass/pull/5993 #5993]&lt;br /&gt;
# Add test file in r.stats.quantile [https://github.com/OSGeo/grass/pull/6002 #6002]&lt;br /&gt;
# Add JSON support for r.stats.quantile [https://github.com/OSGeo/grass/pull/6007 #6007]&lt;br /&gt;
# Add test file in r.volume [https://github.com/OSGeo/grass/pull/6027 #6027]&lt;br /&gt;
# Add JSON support for r.volume [https://github.com/OSGeo/grass/pull/6036 #6036]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 6''' (July 7 - July 13) ||&lt;br /&gt;
# Add JSON support for db.columns [https://github.com/OSGeo/grass/pull/6042 #6042]&lt;br /&gt;
# Add test file in m.measure [https://github.com/OSGeo/grass/pull/6051 #6051]&lt;br /&gt;
# Add test file in db.connect [https://github.com/OSGeo/grass/pull/6052 #6052]&lt;br /&gt;
# Add JSON support for m.measure [https://github.com/OSGeo/grass/pull/6053 #6053]&lt;br /&gt;
# Add JSON support for db.connect [https://github.com/OSGeo/grass/pull/6059 #6059]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 7''' (July 14 - July 20) ||&lt;br /&gt;
# Add test file in r.regression.multi [https://github.com/OSGeo/grass/pull/6066 #6066]&lt;br /&gt;
# Add test file in v.db.connect [https://github.com/OSGeo/grass/pull/6067 #6067]&lt;br /&gt;
# Add JSON support for r.regression.multi [https://github.com/OSGeo/grass/pull/6075 #6075]&lt;br /&gt;
# Add JSON support for v.db.connect [https://github.com/OSGeo/grass/pull/6077 #6077]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 8''' (July 21 - July 27) ||&lt;br /&gt;
# Add JSON support for g.findfile [https://github.com/OSGeo/grass/pull/6091 #6091]&lt;br /&gt;
# Add test file in r3.info [https://github.com/OSGeo/grass/pull/6098 #6098]&lt;br /&gt;
# Add JSON support for r3.info [https://github.com/OSGeo/grass/pull/6103 #6103]&lt;br /&gt;
# Add test file in v.what.rast [https://github.com/OSGeo/grass/pull/6109 #6109]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 9''' (July 28 - August 3) ||&lt;br /&gt;
# Update format to CSV instead of shell in v.category [https://github.com/OSGeo/grass/pull/6132 #6132]&lt;br /&gt;
# Add CSV output support to r.stats [https://github.com/OSGeo/grass/pull/6133 #6133]&lt;br /&gt;
# Add CSV headers to r.volume [https://github.com/OSGeo/grass/pull/6134 #6134]&lt;br /&gt;
# Add JSON support for v.what.rast [https://github.com/OSGeo/grass/pull/6140 #6140]&lt;br /&gt;
# Add CSV output support to r.profile [https://github.com/OSGeo/grass/pull/6145 #6145]&lt;br /&gt;
# Update test cases in r.distance [https://github.com/OSGeo/grass/pull/6150 #6150]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 10''' (August 4 - August 10) ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 11''' (August 11 - August 17) ||&lt;br /&gt;
# Add JSON and CSV support for r.distance [https://github.com/OSGeo/grass/pull/6204 #6204]&lt;br /&gt;
# Add more test cases in v.class [https://github.com/OSGeo/grass/pull/6205 #6205]&lt;br /&gt;
# Add JSON and CSV support for v.class [https://github.com/OSGeo/grass/pull/6210 #6210]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 12''' (August 18 - August 24) ||&lt;br /&gt;
# Update JSON output format for v.what [https://github.com/OSGeo/grass/pull/6252 #6252]&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Evaluation Period &lt;br /&gt;
|-&lt;br /&gt;
| August 25 - September 1 ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
# Submit code, final evaluation and write the final GSoC report.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Reports =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* Introduced myself on the [https://discourse.osgeo.org/t/gsoc-2025-introduction-nishant-bansal/147005 OSGeo Discourse mailing list].&lt;br /&gt;
* Created both my [https://wiki.osgeo.org/wiki/User:Nishantbansal2003 personal Wiki page] and the [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C project Wiki page], adding all necessary project-related information.&lt;br /&gt;
* Read GRASS documentation to support the addition of Python and JSON examples.&lt;br /&gt;
* Worked on the following pull requests:&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5688 #5688]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5773 #5773]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5775 #5775]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5784 #5784]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5785 #5785]&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to the g.mapset and r.what.color modules.&lt;br /&gt;
* If time permits, I will begin improving the r.info interface: [https://github.com/OSGeo/grass/issues/5793 Issue #5793]&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
'''Project Discussions and Meetings'''&lt;br /&gt;
* '''14 May 2025''': Introductory meeting discussing JSON support and overall project milestones.&lt;br /&gt;
* '''21 May 2025''': Introduction with fellow developers. Discussed priority tools, adding Python/Pandas examples, and approaches for finalizing the JSON schema for each module.&lt;br /&gt;
&lt;br /&gt;
== Week-1 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.mapset''': Added JSON output support, now you can use -p and -l flags to get JSON-formatted results.&lt;br /&gt;
* '''r.univar''': Fixed a bug causing an uninitialized zone_value.&lt;br /&gt;
* '''r.what.color''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5822 #5822])&lt;br /&gt;
* '''r.info (regression tests)''': To maintain backward compatibility while updating its interface, I added strong regression tests.&lt;br /&gt;
* '''r.info (interface improvements)''': Began improving the module’s interface. (See PR [https://github.com/OSGeo/grass/pull/5859 #5859])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.version (see issue [https://github.com/OSGeo/grass/issues/5816 #5816]).&lt;br /&gt;
* Add JSON output support to i.group (see issue [https://github.com/OSGeo/grass/issues/5815 #5815]).&lt;br /&gt;
* If time permits, write tests for r.stats (see issue [https://github.com/OSGeo/grass/issues/5814 #5814]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-2 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.version''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5863 #5863])&lt;br /&gt;
* '''i.group''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5870 #5870])&lt;br /&gt;
* '''r.stats (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats''': Added tests for JSON output; this uncovered a bug, which was fixed alongside.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.distance (see issue [https://github.com/OSGeo/grass/issues/5846 #5846]).&lt;br /&gt;
* Add JSON output support to g.list (see issue [https://github.com/OSGeo/grass/issues/5848 #5848]).&lt;br /&gt;
* If time permits, fix the JSON output format of g.region (see issue [https://github.com/OSGeo/grass/issues/5828 #5828]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-3 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.distance''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5898 #5898])&lt;br /&gt;
* '''r.stats''': Fixed a bug causing an uninitialized &amp;lt;code&amp;gt;window&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
* '''g.list (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''g.list''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5921 #5921])&lt;br /&gt;
* '''g.region''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5929 #5929])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.to.db (see issue [https://github.com/OSGeo/grass/pull/5711 #5711]).&lt;br /&gt;
* Update JSON output format and documentation of r.profile (see issue [https://github.com/OSGeo/grass/pull/5834 #5834]).&lt;br /&gt;
* If time permits, add shell and csv output formats to r.univar (see issue [https://github.com/OSGeo/grass/pull/5824 #5824]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-4 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.to.db''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5946 #5946])&lt;br /&gt;
* '''r.profile''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5962 #5962])&lt;br /&gt;
* '''r.univar''': Implemented SHELL and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/5966 #5966])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.regression.line (see issue [https://github.com/OSGeo/grass/pull/5950 #5950]).&lt;br /&gt;
* Add JSON output support to r.stats.quantile (see issue [https://github.com/OSGeo/grass/pull/5951 #5951]).&lt;br /&gt;
* Add JSON output support to r.volume (see issue [https://github.com/OSGeo/grass/pull/5949 #5949]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-5 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.line (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.line''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5993 #5993])&lt;br /&gt;
* '''r.stats.quantile (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats.quantile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6007 #6007])&lt;br /&gt;
* '''r.volume (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.volume''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6036 #6036])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to m.measure (see issue [https://github.com/OSGeo/grass/pull/6006 #6006]).&lt;br /&gt;
* Add JSON output support to db.columns (see issue [https://github.com/OSGeo/grass/pull/6008 #6008]).&lt;br /&gt;
* Add JSON output support to db.connect (see issue [https://github.com/OSGeo/grass/pull/6009 #6009]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-6 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''db.columns''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6042 #6042])&lt;br /&gt;
* '''m.measure (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''m.measure''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6053 #6053])&lt;br /&gt;
* '''db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6059 #6059])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to v.db.connect (see issue [https://github.com/OSGeo/grass/pull/6014 #6014]).&lt;br /&gt;
* Add JSON output support to r.regression.multi (see issue [https://github.com/OSGeo/grass/pull/6010 #6010]).&lt;br /&gt;
* If time permits, add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* If time permits, add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-7 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.multi (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''v.db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.multi''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6075 #6075])&lt;br /&gt;
* '''v.db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6077 #6077])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* Add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
* If time permits, add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-8 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.findfile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6091 #6091])&lt;br /&gt;
* '''r3.info (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a flag-handling bug.&lt;br /&gt;
* '''r3.info''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6103 #6103])&lt;br /&gt;
* '''v.what.rast (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a sorting bug.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
* Update format to CSV instead of shell in v.category (see issue [https://github.com/OSGeo/grass/pull/6025 #6025]).&lt;br /&gt;
* Add CSV output support to r.stats (see issue [https://github.com/OSGeo/grass/issues/5835 #5835]).&lt;br /&gt;
* If time permits, add CSV output support to r.profile (see issue [https://github.com/OSGeo/grass/issues/5958 #5958]).&lt;br /&gt;
* If time permits, add CSV headers to r.volume (see issue [https://github.com/OSGeo/grass/issues/6049 #6049]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I don’t have any blockers this week. However, I’ll be a little busy with some personal work from August 3 to August 10, so I’ll try to complete next week’s tasks this week itself.&lt;br /&gt;
&lt;br /&gt;
== Week-9 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.category''': Updated format to CSV instead of shell. (See PR [https://github.com/OSGeo/grass/pull/6132 #6132])&lt;br /&gt;
* '''r.stats''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6133 #6133])&lt;br /&gt;
* '''r.volume''': Implemented CSV column headers support. (See PR [https://github.com/OSGeo/grass/pull/6134 #6134])&lt;br /&gt;
* '''v.what.rast''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6140 #6140])&lt;br /&gt;
* '''r.profile''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6145 #6145])&lt;br /&gt;
* '''r.distance (regression tests)''': Updated regression tests to ensure backward compatibility with new JSON support. (See PR [https://github.com/OSGeo/grass/pull/6150 #6150])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* I’ll be a bit busy with some personal work from August 3 to 10, so I completed next week’s tasks last week itself. I’ve already informed my mentors about my limited availability.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* Yes, I’ll be a bit busy with some personal work from August 3 to 10.&lt;br /&gt;
&lt;br /&gt;
== Week-10 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* This week I was busy with some personal work, so I did not complete any additional tasks. However, I had already finished this week’s tasks last week. This week, I mostly focused on handling reviews for those PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.distance (see issue [https://github.com/OSGeo/grass/issues/6135 #6135]).&lt;br /&gt;
* Add JSON output support to v.class (see issue [https://github.com/OSGeo/grass/issues/6136 #6136]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-11 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.distance''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6204 #6204])&lt;br /&gt;
* '''v.class''': Updated regression tests to ensure backward compatibility with new JSON support and fixed a out-of-bounds bug. (See PR [https://github.com/OSGeo/grass/pull/6205 #6205])&lt;br /&gt;
* '''v.class''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6210 #6210])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Discuss next week’s tasks with my mentors, if no issues are assigned, I’ll identify tools that currently lack JSON support and evaluate which ones are feasible to add it to.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-12 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.what''': Update JSON output format. (See PR [https://github.com/OSGeo/grass/pull/6252 #6252])&lt;br /&gt;
* Addressed review comments on my open PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
= Final Report =&lt;br /&gt;
&lt;br /&gt;
== Title ==&lt;br /&gt;
Add JSON output to different tools in C for GRASS&lt;br /&gt;
&lt;br /&gt;
== Organization ==&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
&lt;br /&gt;
== The state of integration BEFORE the start of GSoC ==&lt;br /&gt;
&lt;br /&gt;
== The state of integration AFTER GSoC ==&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
&lt;br /&gt;
== Log of Pull Requests ==&lt;br /&gt;
Below is a list of pull requests submitted to the GRASS repository during GSoC 2025:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pull Request !! Description  !! Date   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5688 #5688] || r.univar: Fix JSON structure || May 20, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5773 #5773] || r.what.color: Add test file || May 25, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5775 #5775] || g.mapset: Add test file || May 26, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5784 #5784] || r.info: Add Python example || May 28, 2025  || Closed&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5785 #5785] || g.region: Add Python example || May 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5810 #5810] || g.mapset: Add JSON support || June 2, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5821 #5821] || r.univar: Fix uninitialized zone_value || June 3, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5822 #5822] || r.what.color: Add JSON support || June 3, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5842 #5842] || r.info: Update test file || June 5, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5859 #5859] || r.info: Improve interface || June 7, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5863 #5863] || g.version: Add JSON support || June 9, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5870 #5870] || i.group: Add JSON support || June 10, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5879 #5879] || r.stats: Add test file || June 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5892 #5892] || r.stats: Add tests for JSON output || June 14, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5898 #5898] || v.distance: Update JSON format || June 16, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5900 #5900] || r.stats: fix uninitialised window value || June 17, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5906 #5906] || g.list: Add test file || June 17, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5921 #5921] || g.list: Add JSON support || June 20, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5929 #5929] || g.region: Update JSON format || June 21, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5946 #5946] || v.to.db: Update JSON format || June 23, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5962 #5962] || r.profile: Update JSON format || June 25, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5966 #5966] || r.univar: Add shell and CSV format || June 25, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5990 #5990] || r.regression.line: Add test file || June 30, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5993 #5993] || r.regression.line: Add JSON support || June 30, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6002 #6002] || r.stats.quantile: Add test file || July 1, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6007 #6007] || r.stats.quantile: Add JSON support || July 1, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6027 #6027] || r.volume: Add test file || July 4, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6036 #6036] || r.volume: Add JSON support || July 6, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6042 #6042] || db.columns: Add JSON support || July 7, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6051 #6051] || m.measure: Add test file || July 10, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6052 #6052] || db.connect: Add test file || July 10, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6053 #6053] || m.measure: Add JSON support || July 11, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6059 #6059] || db.connect: Add JSON support || July 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6066 #6066] || r.regression.multi: Add test file || July 15, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6067 #6067] || v.db.connect: Add test file || July 15, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6075 #6075] || r.regression.multi: Add JSON support || July 18, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6077 #6077] || v.db.connect: Add JSON support || July 19, 2025  || Open&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6091 #6091] || g.findfile: Add JSON support || July 21, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6098 #6098] || r3.info: Add test file || July 22, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6103 #6103] || r3.info: Add JSON support || July 23, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6109 #6109] || v.what.rast: Add test file || July 24, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6132 #6132] || v.category: Use CSV format instead of shell format || July 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6133 #6133] || r.stats: add CSV support || July 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6134 #6134] || r.volume: add csv column headers || July 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6140 #6140] || v.what.rast: Add JSON support || July 29, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6145 #6145] || r.profile: Add CSV support || July 30, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6150 #6150] || r.distance: Update existing test cases || August 1, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6204 #6204] || r.distance: Add JSON and CSV support || August 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6205 #6205] || v.class: Add more test cases and fix out-of-bounds bug || August 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6210 #6210] || v.class: Add JSON and CSV support || August 15, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6252 #6252] || v.what: Update JSON output format || August 23, 2025  || Open&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
== Examples &amp;amp; Images ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{GSoC}}&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28649</id>
		<title>GRASS GSoC 2025 Add JSON output to different tools in C</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28649"/>
		<updated>2025-08-23T12:22:39Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: /* Examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Nishant Bansal&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo - Open Source Geospatial Foundation]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/NishantBansal2003/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''GSoC proposal''' || [https://docs.google.com/document/d/1ZPQ9RXU7b_RUDmBmAMeK7ZjFAV1WC7Urd1Zlz678jyw/edit?tab=t.0#heading=h.z6ne0og04bp5 View Proposal]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Abstract =&lt;br /&gt;
Currently, most GRASS tools produce data in plain text by default. This means that users who want to process the output in Python need to create custom parsing code. To make this easier, several modules could be improved by oﬀering JSON as an alternative output format. Recently, the Parson library was added to the GRASS codebase to support JSON output in addition to plain text. Building on the advancements made during the last GSoC, my project aims to expand JSON output capabilities to more tools using the Parson library. I will also work on making the JSON structure introduced in the previous GSoC more useful and consistent. Additionally, I plan to add support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
&lt;br /&gt;
# Working with mentors to finalize the structure of the JSON output.&lt;br /&gt;
# Adding an option to choose the output format (plain text or JSON) for each updated tool.&lt;br /&gt;
# Make the JSON structure introduced during the last GSoC more useful and consistent across tools.&lt;br /&gt;
# Developing Python test cases to ensure that the JSON output works correctly and to avoid future issues.&lt;br /&gt;
# Providing basic documentation and example JSON outputs for each modified tool.&lt;br /&gt;
# Adding support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
# Develop simple examples demonstrating how to use JSON output in a data science workflow, such as reading JSON data into pandas or python.&lt;br /&gt;
&lt;br /&gt;
= Timeline =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Period !! Timeline  !! Tasks   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period &lt;br /&gt;
||&lt;br /&gt;
May 8 - June 1  &lt;br /&gt;
|| &lt;br /&gt;
# Reviewed the work done during the last GSoC to stabilize the JSON output.&lt;br /&gt;
# Discussed the priority tools for adding JSON support.&lt;br /&gt;
# Read GRASS documentation to add Python and JSON examples to the documentation.&lt;br /&gt;
|| &lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;13&amp;quot; | Official Coding Period &lt;br /&gt;
|-&lt;br /&gt;
| '''Week 1''' (June 2 - June 8) || &lt;br /&gt;
# Add JSON support for g.mapset [https://github.com/OSGeo/grass/pull/5810 #5810]&lt;br /&gt;
# Fix uninitialized zone_value in r.univar [https://github.com/OSGeo/grass/pull/5821 #5821]&lt;br /&gt;
# Add JSON support for r.what.color [https://github.com/OSGeo/grass/pull/5822 #5822]&lt;br /&gt;
# Update test file in r.info [https://github.com/OSGeo/grass/pull/5842 #5842]&lt;br /&gt;
# Improve interface for r.info [https://github.com/OSGeo/grass/pull/5859 #5859]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 2''' (June 9 - June 15) ||&lt;br /&gt;
# Add JSON support for g.version [https://github.com/OSGeo/grass/pull/5863 #5863]&lt;br /&gt;
# Add JSON support for i.group [https://github.com/OSGeo/grass/pull/5870 #5870]&lt;br /&gt;
# Add test file in r.stats [https://github.com/OSGeo/grass/pull/5879 #5879]&lt;br /&gt;
# Add tests for JSON output in r.stats [https://github.com/OSGeo/grass/pull/5892 #5892]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 3''' (June 16 - June 22) ||&lt;br /&gt;
# Update the JSON output schema of v.distance [https://github.com/OSGeo/grass/pull/5898 #5898]&lt;br /&gt;
# Fix uninitialized window variable in r.stats [https://github.com/OSGeo/grass/pull/5900 #5900]&lt;br /&gt;
# Add test file in g.list [https://github.com/OSGeo/grass/pull/5906 #5906]&lt;br /&gt;
# Add JSON support for g.list [https://github.com/OSGeo/grass/pull/5921 #5921]&lt;br /&gt;
# Update the JSON output schema of g.region [https://github.com/OSGeo/grass/pull/5929 #5929]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 4''' (June 23 - June 29) ||&lt;br /&gt;
# Update the JSON output schema of v.to.db [https://github.com/OSGeo/grass/pull/5946 #5946]&lt;br /&gt;
# Update the JSON output schema of r.profile [https://github.com/OSGeo/grass/pull/5962 #5962]&lt;br /&gt;
# Add SHELL and CSV output support for r.univar [https://github.com/OSGeo/grass/pull/5966 #5966]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 5''' (June 30 - July 6) ||&lt;br /&gt;
# Add test file in r.regression.line [https://github.com/OSGeo/grass/pull/5990 #5990]&lt;br /&gt;
# Add JSON support for r.regression.line [https://github.com/OSGeo/grass/pull/5993 #5993]&lt;br /&gt;
# Add test file in r.stats.quantile [https://github.com/OSGeo/grass/pull/6002 #6002]&lt;br /&gt;
# Add JSON support for r.stats.quantile [https://github.com/OSGeo/grass/pull/6007 #6007]&lt;br /&gt;
# Add test file in r.volume [https://github.com/OSGeo/grass/pull/6027 #6027]&lt;br /&gt;
# Add JSON support for r.volume [https://github.com/OSGeo/grass/pull/6036 #6036]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 6''' (July 7 - July 13) ||&lt;br /&gt;
# Add JSON support for db.columns [https://github.com/OSGeo/grass/pull/6042 #6042]&lt;br /&gt;
# Add test file in m.measure [https://github.com/OSGeo/grass/pull/6051 #6051]&lt;br /&gt;
# Add test file in db.connect [https://github.com/OSGeo/grass/pull/6052 #6052]&lt;br /&gt;
# Add JSON support for m.measure [https://github.com/OSGeo/grass/pull/6053 #6053]&lt;br /&gt;
# Add JSON support for db.connect [https://github.com/OSGeo/grass/pull/6059 #6059]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 7''' (July 14 - July 20) ||&lt;br /&gt;
# Add test file in r.regression.multi [https://github.com/OSGeo/grass/pull/6066 #6066]&lt;br /&gt;
# Add test file in v.db.connect [https://github.com/OSGeo/grass/pull/6067 #6067]&lt;br /&gt;
# Add JSON support for r.regression.multi [https://github.com/OSGeo/grass/pull/6075 #6075]&lt;br /&gt;
# Add JSON support for v.db.connect [https://github.com/OSGeo/grass/pull/6077 #6077]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 8''' (July 21 - July 27) ||&lt;br /&gt;
# Add JSON support for g.findfile [https://github.com/OSGeo/grass/pull/6091 #6091]&lt;br /&gt;
# Add test file in r3.info [https://github.com/OSGeo/grass/pull/6098 #6098]&lt;br /&gt;
# Add JSON support for r3.info [https://github.com/OSGeo/grass/pull/6103 #6103]&lt;br /&gt;
# Add test file in v.what.rast [https://github.com/OSGeo/grass/pull/6109 #6109]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 9''' (July 28 - August 3) ||&lt;br /&gt;
# Update format to CSV instead of shell in v.category [https://github.com/OSGeo/grass/pull/6132 #6132]&lt;br /&gt;
# Add CSV output support to r.stats [https://github.com/OSGeo/grass/pull/6133 #6133]&lt;br /&gt;
# Add CSV headers to r.volume [https://github.com/OSGeo/grass/pull/6134 #6134]&lt;br /&gt;
# Add JSON support for v.what.rast [https://github.com/OSGeo/grass/pull/6140 #6140]&lt;br /&gt;
# Add CSV output support to r.profile [https://github.com/OSGeo/grass/pull/6145 #6145]&lt;br /&gt;
# Update test cases in r.distance [https://github.com/OSGeo/grass/pull/6150 #6150]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 10''' (August 4 - August 10) ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 11''' (August 11 - August 17) ||&lt;br /&gt;
# Add JSON and CSV support for r.distance [https://github.com/OSGeo/grass/pull/6204 #6204]&lt;br /&gt;
# Add more test cases in v.class [https://github.com/OSGeo/grass/pull/6205 #6205]&lt;br /&gt;
# Add JSON and CSV support for v.class [https://github.com/OSGeo/grass/pull/6210 #6210]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 12''' (August 18 - August 24) ||&lt;br /&gt;
# Update JSON output format for v.what [https://github.com/OSGeo/grass/pull/6252 #6252]&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Evaluation Period &lt;br /&gt;
|-&lt;br /&gt;
| August 25 - September 1 ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
# Submit code, final evaluation and write the final GSoC report.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Reports =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* Introduced myself on the [https://discourse.osgeo.org/t/gsoc-2025-introduction-nishant-bansal/147005 OSGeo Discourse mailing list].&lt;br /&gt;
* Created both my [https://wiki.osgeo.org/wiki/User:Nishantbansal2003 personal Wiki page] and the [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C project Wiki page], adding all necessary project-related information.&lt;br /&gt;
* Read GRASS documentation to support the addition of Python and JSON examples.&lt;br /&gt;
* Worked on the following pull requests:&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5688 #5688]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5773 #5773]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5775 #5775]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5784 #5784]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5785 #5785]&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to the g.mapset and r.what.color modules.&lt;br /&gt;
* If time permits, I will begin improving the r.info interface: [https://github.com/OSGeo/grass/issues/5793 Issue #5793]&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
'''Project Discussions and Meetings'''&lt;br /&gt;
* '''14 May 2025''': Introductory meeting discussing JSON support and overall project milestones.&lt;br /&gt;
* '''21 May 2025''': Introduction with fellow developers. Discussed priority tools, adding Python/Pandas examples, and approaches for finalizing the JSON schema for each module.&lt;br /&gt;
&lt;br /&gt;
== Week-1 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.mapset''': Added JSON output support, now you can use -p and -l flags to get JSON-formatted results.&lt;br /&gt;
* '''r.univar''': Fixed a bug causing an uninitialized zone_value.&lt;br /&gt;
* '''r.what.color''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5822 #5822])&lt;br /&gt;
* '''r.info (regression tests)''': To maintain backward compatibility while updating its interface, I added strong regression tests.&lt;br /&gt;
* '''r.info (interface improvements)''': Began improving the module’s interface. (See PR [https://github.com/OSGeo/grass/pull/5859 #5859])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.version (see issue [https://github.com/OSGeo/grass/issues/5816 #5816]).&lt;br /&gt;
* Add JSON output support to i.group (see issue [https://github.com/OSGeo/grass/issues/5815 #5815]).&lt;br /&gt;
* If time permits, write tests for r.stats (see issue [https://github.com/OSGeo/grass/issues/5814 #5814]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-2 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.version''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5863 #5863])&lt;br /&gt;
* '''i.group''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5870 #5870])&lt;br /&gt;
* '''r.stats (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats''': Added tests for JSON output; this uncovered a bug, which was fixed alongside.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.distance (see issue [https://github.com/OSGeo/grass/issues/5846 #5846]).&lt;br /&gt;
* Add JSON output support to g.list (see issue [https://github.com/OSGeo/grass/issues/5848 #5848]).&lt;br /&gt;
* If time permits, fix the JSON output format of g.region (see issue [https://github.com/OSGeo/grass/issues/5828 #5828]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-3 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.distance''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5898 #5898])&lt;br /&gt;
* '''r.stats''': Fixed a bug causing an uninitialized &amp;lt;code&amp;gt;window&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
* '''g.list (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''g.list''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5921 #5921])&lt;br /&gt;
* '''g.region''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5929 #5929])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.to.db (see issue [https://github.com/OSGeo/grass/pull/5711 #5711]).&lt;br /&gt;
* Update JSON output format and documentation of r.profile (see issue [https://github.com/OSGeo/grass/pull/5834 #5834]).&lt;br /&gt;
* If time permits, add shell and csv output formats to r.univar (see issue [https://github.com/OSGeo/grass/pull/5824 #5824]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-4 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.to.db''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5946 #5946])&lt;br /&gt;
* '''r.profile''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5962 #5962])&lt;br /&gt;
* '''r.univar''': Implemented SHELL and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/5966 #5966])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.regression.line (see issue [https://github.com/OSGeo/grass/pull/5950 #5950]).&lt;br /&gt;
* Add JSON output support to r.stats.quantile (see issue [https://github.com/OSGeo/grass/pull/5951 #5951]).&lt;br /&gt;
* Add JSON output support to r.volume (see issue [https://github.com/OSGeo/grass/pull/5949 #5949]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-5 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.line (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.line''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5993 #5993])&lt;br /&gt;
* '''r.stats.quantile (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats.quantile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6007 #6007])&lt;br /&gt;
* '''r.volume (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.volume''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6036 #6036])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to m.measure (see issue [https://github.com/OSGeo/grass/pull/6006 #6006]).&lt;br /&gt;
* Add JSON output support to db.columns (see issue [https://github.com/OSGeo/grass/pull/6008 #6008]).&lt;br /&gt;
* Add JSON output support to db.connect (see issue [https://github.com/OSGeo/grass/pull/6009 #6009]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-6 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''db.columns''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6042 #6042])&lt;br /&gt;
* '''m.measure (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''m.measure''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6053 #6053])&lt;br /&gt;
* '''db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6059 #6059])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to v.db.connect (see issue [https://github.com/OSGeo/grass/pull/6014 #6014]).&lt;br /&gt;
* Add JSON output support to r.regression.multi (see issue [https://github.com/OSGeo/grass/pull/6010 #6010]).&lt;br /&gt;
* If time permits, add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* If time permits, add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-7 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.multi (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''v.db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.multi''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6075 #6075])&lt;br /&gt;
* '''v.db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6077 #6077])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* Add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
* If time permits, add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-8 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.findfile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6091 #6091])&lt;br /&gt;
* '''r3.info (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a flag-handling bug.&lt;br /&gt;
* '''r3.info''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6103 #6103])&lt;br /&gt;
* '''v.what.rast (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a sorting bug.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
* Update format to CSV instead of shell in v.category (see issue [https://github.com/OSGeo/grass/pull/6025 #6025]).&lt;br /&gt;
* Add CSV output support to r.stats (see issue [https://github.com/OSGeo/grass/issues/5835 #5835]).&lt;br /&gt;
* If time permits, add CSV output support to r.profile (see issue [https://github.com/OSGeo/grass/issues/5958 #5958]).&lt;br /&gt;
* If time permits, add CSV headers to r.volume (see issue [https://github.com/OSGeo/grass/issues/6049 #6049]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I don’t have any blockers this week. However, I’ll be a little busy with some personal work from August 3 to August 10, so I’ll try to complete next week’s tasks this week itself.&lt;br /&gt;
&lt;br /&gt;
== Week-9 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.category''': Updated format to CSV instead of shell. (See PR [https://github.com/OSGeo/grass/pull/6132 #6132])&lt;br /&gt;
* '''r.stats''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6133 #6133])&lt;br /&gt;
* '''r.volume''': Implemented CSV column headers support. (See PR [https://github.com/OSGeo/grass/pull/6134 #6134])&lt;br /&gt;
* '''v.what.rast''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6140 #6140])&lt;br /&gt;
* '''r.profile''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6145 #6145])&lt;br /&gt;
* '''r.distance (regression tests)''': Updated regression tests to ensure backward compatibility with new JSON support. (See PR [https://github.com/OSGeo/grass/pull/6150 #6150])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* I’ll be a bit busy with some personal work from August 3 to 10, so I completed next week’s tasks last week itself. I’ve already informed my mentors about my limited availability.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* Yes, I’ll be a bit busy with some personal work from August 3 to 10.&lt;br /&gt;
&lt;br /&gt;
== Week-10 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* This week I was busy with some personal work, so I did not complete any additional tasks. However, I had already finished this week’s tasks last week. This week, I mostly focused on handling reviews for those PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.distance (see issue [https://github.com/OSGeo/grass/issues/6135 #6135]).&lt;br /&gt;
* Add JSON output support to v.class (see issue [https://github.com/OSGeo/grass/issues/6136 #6136]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-11 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.distance''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6204 #6204])&lt;br /&gt;
* '''v.class''': Updated regression tests to ensure backward compatibility with new JSON support and fixed a out-of-bounds bug. (See PR [https://github.com/OSGeo/grass/pull/6205 #6205])&lt;br /&gt;
* '''v.class''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6210 #6210])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Discuss next week’s tasks with my mentors, if no issues are assigned, I’ll identify tools that currently lack JSON support and evaluate which ones are feasible to add it to.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-12 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.what''': Update JSON output format. (See PR [https://github.com/OSGeo/grass/pull/6252 #6252])&lt;br /&gt;
* Addressed review comments on my open PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
= Final Report =&lt;br /&gt;
&lt;br /&gt;
== Title ==&lt;br /&gt;
&lt;br /&gt;
== Organization ==&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
&lt;br /&gt;
== The state of integration BEFORE the start of GSoC ==&lt;br /&gt;
&lt;br /&gt;
== The state of integration AFTER GSoC ==&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
&lt;br /&gt;
== Log of Pull Requests ==&lt;br /&gt;
Below is a list of pull requests submitted to the GRASS repository during GSoC 2025:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pull Request !! Description  !! Date   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5688 #5688] || r.univar: Fix JSON structure || May 20, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5773 #5773] || r.what.color: Add test file || May 25, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5775 #5775] || g.mapset: Add test file || May 26, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5784 #5784] || r.info: Add Python example || May 28, 2025  || Closed&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5785 #5785] || g.region: Add Python example || May 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5810 #5810] || g.mapset: Add JSON support || June 2, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5821 #5821] || r.univar: Fix uninitialized zone_value || June 3, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5822 #5822] || r.what.color: Add JSON support || June 3, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5842 #5842] || r.info: Update test file || June 5, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5859 #5859] || r.info: Improve interface || June 7, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5863 #5863] || g.version: Add JSON support || June 9, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5870 #5870] || i.group: Add JSON support || June 10, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5879 #5879] || r.stats: Add test file || June 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5892 #5892] || r.stats: Add tests for JSON output || June 14, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5898 #5898] || v.distance: Update JSON format || June 16, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5900 #5900] || r.stats: fix uninitialised window value || June 17, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5906 #5906] || g.list: Add test file || June 17, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5921 #5921] || g.list: Add JSON support || June 20, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5929 #5929] || g.region: Update JSON format || June 21, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5946 #5946] || v.to.db: Update JSON format || June 23, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5962 #5962] || r.profile: Update JSON format || June 25, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5966 #5966] || r.univar: Add shell and CSV format || June 25, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5990 #5990] || r.regression.line: Add test file || June 30, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5993 #5993] || r.regression.line: Add JSON support || June 30, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6002 #6002] || r.stats.quantile: Add test file || July 1, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6007 #6007] || r.stats.quantile: Add JSON support || July 1, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6027 #6027] || r.volume: Add test file || July 4, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6036 #6036] || r.volume: Add JSON support || July 6, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6042 #6042] || db.columns: Add JSON support || July 7, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6051 #6051] || m.measure: Add test file || July 10, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6052 #6052] || db.connect: Add test file || July 10, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6053 #6053] || m.measure: Add JSON support || July 11, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6059 #6059] || db.connect: Add JSON support || July 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6066 #6066] || r.regression.multi: Add test file || July 15, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6067 #6067] || v.db.connect: Add test file || July 15, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6075 #6075] || r.regression.multi: Add JSON support || July 18, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6077 #6077] || v.db.connect: Add JSON support || July 19, 2025  || Open&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6091 #6091] || g.findfile: Add JSON support || July 21, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6098 #6098] || r3.info: Add test file || July 22, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6103 #6103] || r3.info: Add JSON support || July 23, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6109 #6109] || v.what.rast: Add test file || July 24, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6132 #6132] || v.category: Use CSV format instead of shell format || July 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6133 #6133] || r.stats: add CSV support || July 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6134 #6134] || r.volume: add csv column headers || July 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6140 #6140] || v.what.rast: Add JSON support || July 29, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6145 #6145] || r.profile: Add CSV support || July 30, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6150 #6150] || r.distance: Update existing test cases || August 1, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6204 #6204] || r.distance: Add JSON and CSV support || August 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6205 #6205] || v.class: Add more test cases and fix out-of-bounds bug || August 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6210 #6210] || v.class: Add JSON and CSV support || August 15, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6252 #6252] || v.what: Update JSON output format || August 23, 2025  || Open&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
== Examples &amp;amp; Images ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{GSoC}}&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28648</id>
		<title>GRASS GSoC 2025 Add JSON output to different tools in C</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28648"/>
		<updated>2025-08-23T12:20:41Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Nishant Bansal&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo - Open Source Geospatial Foundation]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/NishantBansal2003/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''GSoC proposal''' || [https://docs.google.com/document/d/1ZPQ9RXU7b_RUDmBmAMeK7ZjFAV1WC7Urd1Zlz678jyw/edit?tab=t.0#heading=h.z6ne0og04bp5 View Proposal]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Abstract =&lt;br /&gt;
Currently, most GRASS tools produce data in plain text by default. This means that users who want to process the output in Python need to create custom parsing code. To make this easier, several modules could be improved by oﬀering JSON as an alternative output format. Recently, the Parson library was added to the GRASS codebase to support JSON output in addition to plain text. Building on the advancements made during the last GSoC, my project aims to expand JSON output capabilities to more tools using the Parson library. I will also work on making the JSON structure introduced in the previous GSoC more useful and consistent. Additionally, I plan to add support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
&lt;br /&gt;
# Working with mentors to finalize the structure of the JSON output.&lt;br /&gt;
# Adding an option to choose the output format (plain text or JSON) for each updated tool.&lt;br /&gt;
# Make the JSON structure introduced during the last GSoC more useful and consistent across tools.&lt;br /&gt;
# Developing Python test cases to ensure that the JSON output works correctly and to avoid future issues.&lt;br /&gt;
# Providing basic documentation and example JSON outputs for each modified tool.&lt;br /&gt;
# Adding support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
# Develop simple examples demonstrating how to use JSON output in a data science workflow, such as reading JSON data into pandas or python.&lt;br /&gt;
&lt;br /&gt;
= Timeline =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Period !! Timeline  !! Tasks   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period &lt;br /&gt;
||&lt;br /&gt;
May 8 - June 1  &lt;br /&gt;
|| &lt;br /&gt;
# Reviewed the work done during the last GSoC to stabilize the JSON output.&lt;br /&gt;
# Discussed the priority tools for adding JSON support.&lt;br /&gt;
# Read GRASS documentation to add Python and JSON examples to the documentation.&lt;br /&gt;
|| &lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;13&amp;quot; | Official Coding Period &lt;br /&gt;
|-&lt;br /&gt;
| '''Week 1''' (June 2 - June 8) || &lt;br /&gt;
# Add JSON support for g.mapset [https://github.com/OSGeo/grass/pull/5810 #5810]&lt;br /&gt;
# Fix uninitialized zone_value in r.univar [https://github.com/OSGeo/grass/pull/5821 #5821]&lt;br /&gt;
# Add JSON support for r.what.color [https://github.com/OSGeo/grass/pull/5822 #5822]&lt;br /&gt;
# Update test file in r.info [https://github.com/OSGeo/grass/pull/5842 #5842]&lt;br /&gt;
# Improve interface for r.info [https://github.com/OSGeo/grass/pull/5859 #5859]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 2''' (June 9 - June 15) ||&lt;br /&gt;
# Add JSON support for g.version [https://github.com/OSGeo/grass/pull/5863 #5863]&lt;br /&gt;
# Add JSON support for i.group [https://github.com/OSGeo/grass/pull/5870 #5870]&lt;br /&gt;
# Add test file in r.stats [https://github.com/OSGeo/grass/pull/5879 #5879]&lt;br /&gt;
# Add tests for JSON output in r.stats [https://github.com/OSGeo/grass/pull/5892 #5892]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 3''' (June 16 - June 22) ||&lt;br /&gt;
# Update the JSON output schema of v.distance [https://github.com/OSGeo/grass/pull/5898 #5898]&lt;br /&gt;
# Fix uninitialized window variable in r.stats [https://github.com/OSGeo/grass/pull/5900 #5900]&lt;br /&gt;
# Add test file in g.list [https://github.com/OSGeo/grass/pull/5906 #5906]&lt;br /&gt;
# Add JSON support for g.list [https://github.com/OSGeo/grass/pull/5921 #5921]&lt;br /&gt;
# Update the JSON output schema of g.region [https://github.com/OSGeo/grass/pull/5929 #5929]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 4''' (June 23 - June 29) ||&lt;br /&gt;
# Update the JSON output schema of v.to.db [https://github.com/OSGeo/grass/pull/5946 #5946]&lt;br /&gt;
# Update the JSON output schema of r.profile [https://github.com/OSGeo/grass/pull/5962 #5962]&lt;br /&gt;
# Add SHELL and CSV output support for r.univar [https://github.com/OSGeo/grass/pull/5966 #5966]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 5''' (June 30 - July 6) ||&lt;br /&gt;
# Add test file in r.regression.line [https://github.com/OSGeo/grass/pull/5990 #5990]&lt;br /&gt;
# Add JSON support for r.regression.line [https://github.com/OSGeo/grass/pull/5993 #5993]&lt;br /&gt;
# Add test file in r.stats.quantile [https://github.com/OSGeo/grass/pull/6002 #6002]&lt;br /&gt;
# Add JSON support for r.stats.quantile [https://github.com/OSGeo/grass/pull/6007 #6007]&lt;br /&gt;
# Add test file in r.volume [https://github.com/OSGeo/grass/pull/6027 #6027]&lt;br /&gt;
# Add JSON support for r.volume [https://github.com/OSGeo/grass/pull/6036 #6036]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 6''' (July 7 - July 13) ||&lt;br /&gt;
# Add JSON support for db.columns [https://github.com/OSGeo/grass/pull/6042 #6042]&lt;br /&gt;
# Add test file in m.measure [https://github.com/OSGeo/grass/pull/6051 #6051]&lt;br /&gt;
# Add test file in db.connect [https://github.com/OSGeo/grass/pull/6052 #6052]&lt;br /&gt;
# Add JSON support for m.measure [https://github.com/OSGeo/grass/pull/6053 #6053]&lt;br /&gt;
# Add JSON support for db.connect [https://github.com/OSGeo/grass/pull/6059 #6059]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 7''' (July 14 - July 20) ||&lt;br /&gt;
# Add test file in r.regression.multi [https://github.com/OSGeo/grass/pull/6066 #6066]&lt;br /&gt;
# Add test file in v.db.connect [https://github.com/OSGeo/grass/pull/6067 #6067]&lt;br /&gt;
# Add JSON support for r.regression.multi [https://github.com/OSGeo/grass/pull/6075 #6075]&lt;br /&gt;
# Add JSON support for v.db.connect [https://github.com/OSGeo/grass/pull/6077 #6077]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 8''' (July 21 - July 27) ||&lt;br /&gt;
# Add JSON support for g.findfile [https://github.com/OSGeo/grass/pull/6091 #6091]&lt;br /&gt;
# Add test file in r3.info [https://github.com/OSGeo/grass/pull/6098 #6098]&lt;br /&gt;
# Add JSON support for r3.info [https://github.com/OSGeo/grass/pull/6103 #6103]&lt;br /&gt;
# Add test file in v.what.rast [https://github.com/OSGeo/grass/pull/6109 #6109]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 9''' (July 28 - August 3) ||&lt;br /&gt;
# Update format to CSV instead of shell in v.category [https://github.com/OSGeo/grass/pull/6132 #6132]&lt;br /&gt;
# Add CSV output support to r.stats [https://github.com/OSGeo/grass/pull/6133 #6133]&lt;br /&gt;
# Add CSV headers to r.volume [https://github.com/OSGeo/grass/pull/6134 #6134]&lt;br /&gt;
# Add JSON support for v.what.rast [https://github.com/OSGeo/grass/pull/6140 #6140]&lt;br /&gt;
# Add CSV output support to r.profile [https://github.com/OSGeo/grass/pull/6145 #6145]&lt;br /&gt;
# Update test cases in r.distance [https://github.com/OSGeo/grass/pull/6150 #6150]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 10''' (August 4 - August 10) ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 11''' (August 11 - August 17) ||&lt;br /&gt;
# Add JSON and CSV support for r.distance [https://github.com/OSGeo/grass/pull/6204 #6204]&lt;br /&gt;
# Add more test cases in v.class [https://github.com/OSGeo/grass/pull/6205 #6205]&lt;br /&gt;
# Add JSON and CSV support for v.class [https://github.com/OSGeo/grass/pull/6210 #6210]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 12''' (August 18 - August 24) ||&lt;br /&gt;
# Update JSON output format for v.what [https://github.com/OSGeo/grass/pull/6252 #6252]&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Evaluation Period &lt;br /&gt;
|-&lt;br /&gt;
| August 25 - September 1 ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
# Submit code, final evaluation and write the final GSoC report.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Reports =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* Introduced myself on the [https://discourse.osgeo.org/t/gsoc-2025-introduction-nishant-bansal/147005 OSGeo Discourse mailing list].&lt;br /&gt;
* Created both my [https://wiki.osgeo.org/wiki/User:Nishantbansal2003 personal Wiki page] and the [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C project Wiki page], adding all necessary project-related information.&lt;br /&gt;
* Read GRASS documentation to support the addition of Python and JSON examples.&lt;br /&gt;
* Worked on the following pull requests:&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5688 #5688]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5773 #5773]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5775 #5775]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5784 #5784]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5785 #5785]&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to the g.mapset and r.what.color modules.&lt;br /&gt;
* If time permits, I will begin improving the r.info interface: [https://github.com/OSGeo/grass/issues/5793 Issue #5793]&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
'''Project Discussions and Meetings'''&lt;br /&gt;
* '''14 May 2025''': Introductory meeting discussing JSON support and overall project milestones.&lt;br /&gt;
* '''21 May 2025''': Introduction with fellow developers. Discussed priority tools, adding Python/Pandas examples, and approaches for finalizing the JSON schema for each module.&lt;br /&gt;
&lt;br /&gt;
== Week-1 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.mapset''': Added JSON output support, now you can use -p and -l flags to get JSON-formatted results.&lt;br /&gt;
* '''r.univar''': Fixed a bug causing an uninitialized zone_value.&lt;br /&gt;
* '''r.what.color''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5822 #5822])&lt;br /&gt;
* '''r.info (regression tests)''': To maintain backward compatibility while updating its interface, I added strong regression tests.&lt;br /&gt;
* '''r.info (interface improvements)''': Began improving the module’s interface. (See PR [https://github.com/OSGeo/grass/pull/5859 #5859])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.version (see issue [https://github.com/OSGeo/grass/issues/5816 #5816]).&lt;br /&gt;
* Add JSON output support to i.group (see issue [https://github.com/OSGeo/grass/issues/5815 #5815]).&lt;br /&gt;
* If time permits, write tests for r.stats (see issue [https://github.com/OSGeo/grass/issues/5814 #5814]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-2 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.version''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5863 #5863])&lt;br /&gt;
* '''i.group''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5870 #5870])&lt;br /&gt;
* '''r.stats (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats''': Added tests for JSON output; this uncovered a bug, which was fixed alongside.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.distance (see issue [https://github.com/OSGeo/grass/issues/5846 #5846]).&lt;br /&gt;
* Add JSON output support to g.list (see issue [https://github.com/OSGeo/grass/issues/5848 #5848]).&lt;br /&gt;
* If time permits, fix the JSON output format of g.region (see issue [https://github.com/OSGeo/grass/issues/5828 #5828]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-3 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.distance''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5898 #5898])&lt;br /&gt;
* '''r.stats''': Fixed a bug causing an uninitialized &amp;lt;code&amp;gt;window&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
* '''g.list (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''g.list''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5921 #5921])&lt;br /&gt;
* '''g.region''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5929 #5929])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.to.db (see issue [https://github.com/OSGeo/grass/pull/5711 #5711]).&lt;br /&gt;
* Update JSON output format and documentation of r.profile (see issue [https://github.com/OSGeo/grass/pull/5834 #5834]).&lt;br /&gt;
* If time permits, add shell and csv output formats to r.univar (see issue [https://github.com/OSGeo/grass/pull/5824 #5824]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-4 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.to.db''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5946 #5946])&lt;br /&gt;
* '''r.profile''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5962 #5962])&lt;br /&gt;
* '''r.univar''': Implemented SHELL and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/5966 #5966])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.regression.line (see issue [https://github.com/OSGeo/grass/pull/5950 #5950]).&lt;br /&gt;
* Add JSON output support to r.stats.quantile (see issue [https://github.com/OSGeo/grass/pull/5951 #5951]).&lt;br /&gt;
* Add JSON output support to r.volume (see issue [https://github.com/OSGeo/grass/pull/5949 #5949]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-5 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.line (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.line''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5993 #5993])&lt;br /&gt;
* '''r.stats.quantile (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats.quantile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6007 #6007])&lt;br /&gt;
* '''r.volume (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.volume''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6036 #6036])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to m.measure (see issue [https://github.com/OSGeo/grass/pull/6006 #6006]).&lt;br /&gt;
* Add JSON output support to db.columns (see issue [https://github.com/OSGeo/grass/pull/6008 #6008]).&lt;br /&gt;
* Add JSON output support to db.connect (see issue [https://github.com/OSGeo/grass/pull/6009 #6009]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-6 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''db.columns''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6042 #6042])&lt;br /&gt;
* '''m.measure (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''m.measure''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6053 #6053])&lt;br /&gt;
* '''db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6059 #6059])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to v.db.connect (see issue [https://github.com/OSGeo/grass/pull/6014 #6014]).&lt;br /&gt;
* Add JSON output support to r.regression.multi (see issue [https://github.com/OSGeo/grass/pull/6010 #6010]).&lt;br /&gt;
* If time permits, add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* If time permits, add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-7 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.multi (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''v.db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.multi''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6075 #6075])&lt;br /&gt;
* '''v.db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6077 #6077])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* Add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
* If time permits, add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-8 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.findfile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6091 #6091])&lt;br /&gt;
* '''r3.info (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a flag-handling bug.&lt;br /&gt;
* '''r3.info''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6103 #6103])&lt;br /&gt;
* '''v.what.rast (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a sorting bug.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
* Update format to CSV instead of shell in v.category (see issue [https://github.com/OSGeo/grass/pull/6025 #6025]).&lt;br /&gt;
* Add CSV output support to r.stats (see issue [https://github.com/OSGeo/grass/issues/5835 #5835]).&lt;br /&gt;
* If time permits, add CSV output support to r.profile (see issue [https://github.com/OSGeo/grass/issues/5958 #5958]).&lt;br /&gt;
* If time permits, add CSV headers to r.volume (see issue [https://github.com/OSGeo/grass/issues/6049 #6049]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I don’t have any blockers this week. However, I’ll be a little busy with some personal work from August 3 to August 10, so I’ll try to complete next week’s tasks this week itself.&lt;br /&gt;
&lt;br /&gt;
== Week-9 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.category''': Updated format to CSV instead of shell. (See PR [https://github.com/OSGeo/grass/pull/6132 #6132])&lt;br /&gt;
* '''r.stats''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6133 #6133])&lt;br /&gt;
* '''r.volume''': Implemented CSV column headers support. (See PR [https://github.com/OSGeo/grass/pull/6134 #6134])&lt;br /&gt;
* '''v.what.rast''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6140 #6140])&lt;br /&gt;
* '''r.profile''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6145 #6145])&lt;br /&gt;
* '''r.distance (regression tests)''': Updated regression tests to ensure backward compatibility with new JSON support. (See PR [https://github.com/OSGeo/grass/pull/6150 #6150])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* I’ll be a bit busy with some personal work from August 3 to 10, so I completed next week’s tasks last week itself. I’ve already informed my mentors about my limited availability.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* Yes, I’ll be a bit busy with some personal work from August 3 to 10.&lt;br /&gt;
&lt;br /&gt;
== Week-10 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* This week I was busy with some personal work, so I did not complete any additional tasks. However, I had already finished this week’s tasks last week. This week, I mostly focused on handling reviews for those PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.distance (see issue [https://github.com/OSGeo/grass/issues/6135 #6135]).&lt;br /&gt;
* Add JSON output support to v.class (see issue [https://github.com/OSGeo/grass/issues/6136 #6136]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-11 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.distance''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6204 #6204])&lt;br /&gt;
* '''v.class''': Updated regression tests to ensure backward compatibility with new JSON support and fixed a out-of-bounds bug. (See PR [https://github.com/OSGeo/grass/pull/6205 #6205])&lt;br /&gt;
* '''v.class''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6210 #6210])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Discuss next week’s tasks with my mentors, if no issues are assigned, I’ll identify tools that currently lack JSON support and evaluate which ones are feasible to add it to.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-12 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.what''': Update JSON output format. (See PR [https://github.com/OSGeo/grass/pull/6252 #6252])&lt;br /&gt;
* Addressed review comments on my open PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
= Final Report =&lt;br /&gt;
&lt;br /&gt;
== Title ==&lt;br /&gt;
&lt;br /&gt;
== Organization ==&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
&lt;br /&gt;
== The state of integration BEFORE the start of GSoC ==&lt;br /&gt;
&lt;br /&gt;
== The state of integration AFTER GSoC ==&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
&lt;br /&gt;
== Log of Pull Requests ==&lt;br /&gt;
Below is a list of pull requests submitted to the GRASS repository during GSoC 2025:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pull Request !! Description  !! Date   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5688 #5688] || r.univar: Fix JSON structure || May 20, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5773 #5773] || r.what.color: Add test file || May 25, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5775 #5775] || g.mapset: Add test file || May 26, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5784 #5784] || r.info: Add Python example || May 28, 2025  || Closed&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5785 #5785] || g.region: Add Python example || May 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5810 #5810] || g.mapset: Add JSON support || June 2, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5821 #5821] || r.univar: Fix uninitialized zone_value || June 3, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5822 #5822] || r.what.color: Add JSON support || June 3, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5842 #5842] || r.info: Update test file || June 5, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5859 #5859] || r.info: Improve interface || June 7, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5863 #5863] || g.version: Add JSON support || June 9, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5870 #5870] || i.group: Add JSON support || June 10, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5879 #5879] || r.stats: Add test file || June 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5892 #5892] || r.stats: Add tests for JSON output || June 14, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5898 #5898] || v.distance: Update JSON format || June 16, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5900 #5900] || r.stats: fix uninitialised window value || June 17, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5906 #5906] || g.list: Add test file || June 17, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5921 #5921] || g.list: Add JSON support || June 20, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5929 #5929] || g.region: Update JSON format || June 21, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5946 #5946] || v.to.db: Update JSON format || June 23, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5962 #5962] || r.profile: Update JSON format || June 25, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5966 #5966] || r.univar: Add shell and CSV format || June 25, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5990 #5990] || r.regression.line: Add test file || June 30, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5993 #5993] || r.regression.line: Add JSON support || June 30, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6002 #6002] || r.stats.quantile: Add test file || July 1, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6007 #6007] || r.stats.quantile: Add JSON support || July 1, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6027 #6027] || r.volume: Add test file || July 4, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6036 #6036] || r.volume: Add JSON support || July 6, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6042 #6042] || db.columns: Add JSON support || July 7, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6051 #6051] || m.measure: Add test file || July 10, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6052 #6052] || db.connect: Add test file || July 10, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6053 #6053] || m.measure: Add JSON support || July 11, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6059 #6059] || db.connect: Add JSON support || July 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6066 #6066] || r.regression.multi: Add test file || July 15, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6067 #6067] || v.db.connect: Add test file || July 15, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6075 #6075] || r.regression.multi: Add JSON support || July 18, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6077 #6077] || v.db.connect: Add JSON support || July 19, 2025  || Open&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6091 #6091] || g.findfile: Add JSON support || July 21, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6098 #6098] || r3.info: Add test file || July 22, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6103 #6103] || r3.info: Add JSON support || July 23, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6109 #6109] || v.what.rast: Add test file || July 24, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6132 #6132] || v.category: Use CSV format instead of shell format || July 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6133 #6133] || r.stats: add CSV support || July 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6134 #6134] || r.volume: add csv column headers || July 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6140 #6140] || v.what.rast: Add JSON support || July 29, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6145 #6145] || r.profile: Add CSV support || July 30, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6150 #6150] || r.distance: Update existing test cases || August 1, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6204 #6204] || r.distance: Add JSON and CSV support || August 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6205 #6205] || v.class: Add more test cases and fix out-of-bounds bug || August 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6210 #6210] || v.class: Add JSON and CSV support || August 15, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6252 #6252] || v.what: Update JSON output format || August 23, 2025  || Open&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{GSoC}}&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28647</id>
		<title>GRASS GSoC 2025 Add JSON output to different tools in C</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28647"/>
		<updated>2025-08-23T10:02:27Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: /* Timeline */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Nishant Bansal&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo - Open Source Geospatial Foundation]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/NishantBansal2003/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''GSoC proposal''' || [https://docs.google.com/document/d/1ZPQ9RXU7b_RUDmBmAMeK7ZjFAV1WC7Urd1Zlz678jyw/edit?tab=t.0#heading=h.z6ne0og04bp5 View Proposal]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Abstract =&lt;br /&gt;
Currently, most GRASS tools produce data in plain text by default. This means that users who want to process the output in Python need to create custom parsing code. To make this easier, several modules could be improved by oﬀering JSON as an alternative output format. Recently, the Parson library was added to the GRASS codebase to support JSON output in addition to plain text. Building on the advancements made during the last GSoC, my project aims to expand JSON output capabilities to more tools using the Parson library. I will also work on making the JSON structure introduced in the previous GSoC more useful and consistent. Additionally, I plan to add support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
&lt;br /&gt;
# Working with mentors to finalize the structure of the JSON output.&lt;br /&gt;
# Adding an option to choose the output format (plain text or JSON) for each updated tool.&lt;br /&gt;
# Make the JSON structure introduced during the last GSoC more useful and consistent across tools.&lt;br /&gt;
# Developing Python test cases to ensure that the JSON output works correctly and to avoid future issues.&lt;br /&gt;
# Providing basic documentation and example JSON outputs for each modified tool.&lt;br /&gt;
# Adding support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
# Develop simple examples demonstrating how to use JSON output in a data science workflow, such as reading JSON data into pandas or python.&lt;br /&gt;
&lt;br /&gt;
= Timeline =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Period !! Timeline  !! Tasks   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period &lt;br /&gt;
||&lt;br /&gt;
May 8 - June 1  &lt;br /&gt;
|| &lt;br /&gt;
# Reviewed the work done during the last GSoC to stabilize the JSON output.&lt;br /&gt;
# Discussed the priority tools for adding JSON support.&lt;br /&gt;
# Read GRASS documentation to add Python and JSON examples to the documentation.&lt;br /&gt;
|| &lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;13&amp;quot; | Official Coding Period &lt;br /&gt;
|-&lt;br /&gt;
| '''Week 1''' (June 2 - June 8) || &lt;br /&gt;
# Add JSON support for g.mapset [https://github.com/OSGeo/grass/pull/5810 #5810]&lt;br /&gt;
# Fix uninitialized zone_value in r.univar [https://github.com/OSGeo/grass/pull/5821 #5821]&lt;br /&gt;
# Add JSON support for r.what.color [https://github.com/OSGeo/grass/pull/5822 #5822]&lt;br /&gt;
# Update test file in r.info [https://github.com/OSGeo/grass/pull/5842 #5842]&lt;br /&gt;
# Improve interface for r.info [https://github.com/OSGeo/grass/pull/5859 #5859]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 2''' (June 9 - June 15) ||&lt;br /&gt;
# Add JSON support for g.version [https://github.com/OSGeo/grass/pull/5863 #5863]&lt;br /&gt;
# Add JSON support for i.group [https://github.com/OSGeo/grass/pull/5870 #5870]&lt;br /&gt;
# Add test file in r.stats [https://github.com/OSGeo/grass/pull/5879 #5879]&lt;br /&gt;
# Add tests for JSON output in r.stats [https://github.com/OSGeo/grass/pull/5892 #5892]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 3''' (June 16 - June 22) ||&lt;br /&gt;
# Update the JSON output schema of v.distance [https://github.com/OSGeo/grass/pull/5898 #5898]&lt;br /&gt;
# Fix uninitialized window variable in r.stats [https://github.com/OSGeo/grass/pull/5900 #5900]&lt;br /&gt;
# Add test file in g.list [https://github.com/OSGeo/grass/pull/5906 #5906]&lt;br /&gt;
# Add JSON support for g.list [https://github.com/OSGeo/grass/pull/5921 #5921]&lt;br /&gt;
# Update the JSON output schema of g.region [https://github.com/OSGeo/grass/pull/5929 #5929]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 4''' (June 23 - June 29) ||&lt;br /&gt;
# Update the JSON output schema of v.to.db [https://github.com/OSGeo/grass/pull/5946 #5946]&lt;br /&gt;
# Update the JSON output schema of r.profile [https://github.com/OSGeo/grass/pull/5962 #5962]&lt;br /&gt;
# Add SHELL and CSV output support for r.univar [https://github.com/OSGeo/grass/pull/5966 #5966]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 5''' (June 30 - July 6) ||&lt;br /&gt;
# Add test file in r.regression.line [https://github.com/OSGeo/grass/pull/5990 #5990]&lt;br /&gt;
# Add JSON support for r.regression.line [https://github.com/OSGeo/grass/pull/5993 #5993]&lt;br /&gt;
# Add test file in r.stats.quantile [https://github.com/OSGeo/grass/pull/6002 #6002]&lt;br /&gt;
# Add JSON support for r.stats.quantile [https://github.com/OSGeo/grass/pull/6007 #6007]&lt;br /&gt;
# Add test file in r.volume [https://github.com/OSGeo/grass/pull/6027 #6027]&lt;br /&gt;
# Add JSON support for r.volume [https://github.com/OSGeo/grass/pull/6036 #6036]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 6''' (July 7 - July 13) ||&lt;br /&gt;
# Add JSON support for db.columns [https://github.com/OSGeo/grass/pull/6042 #6042]&lt;br /&gt;
# Add test file in m.measure [https://github.com/OSGeo/grass/pull/6051 #6051]&lt;br /&gt;
# Add test file in db.connect [https://github.com/OSGeo/grass/pull/6052 #6052]&lt;br /&gt;
# Add JSON support for m.measure [https://github.com/OSGeo/grass/pull/6053 #6053]&lt;br /&gt;
# Add JSON support for db.connect [https://github.com/OSGeo/grass/pull/6059 #6059]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 7''' (July 14 - July 20) ||&lt;br /&gt;
# Add test file in r.regression.multi [https://github.com/OSGeo/grass/pull/6066 #6066]&lt;br /&gt;
# Add test file in v.db.connect [https://github.com/OSGeo/grass/pull/6067 #6067]&lt;br /&gt;
# Add JSON support for r.regression.multi [https://github.com/OSGeo/grass/pull/6075 #6075]&lt;br /&gt;
# Add JSON support for v.db.connect [https://github.com/OSGeo/grass/pull/6077 #6077]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 8''' (July 21 - July 27) ||&lt;br /&gt;
# Add JSON support for g.findfile [https://github.com/OSGeo/grass/pull/6091 #6091]&lt;br /&gt;
# Add test file in r3.info [https://github.com/OSGeo/grass/pull/6098 #6098]&lt;br /&gt;
# Add JSON support for r3.info [https://github.com/OSGeo/grass/pull/6103 #6103]&lt;br /&gt;
# Add test file in v.what.rast [https://github.com/OSGeo/grass/pull/6109 #6109]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 9''' (July 28 - August 3) ||&lt;br /&gt;
# Update format to CSV instead of shell in v.category [https://github.com/OSGeo/grass/pull/6132 #6132]&lt;br /&gt;
# Add CSV output support to r.stats [https://github.com/OSGeo/grass/pull/6133 #6133]&lt;br /&gt;
# Add CSV headers to r.volume [https://github.com/OSGeo/grass/pull/6134 #6134]&lt;br /&gt;
# Add JSON support for v.what.rast [https://github.com/OSGeo/grass/pull/6140 #6140]&lt;br /&gt;
# Add CSV output support to r.profile [https://github.com/OSGeo/grass/pull/6145 #6145]&lt;br /&gt;
# Update test cases in r.distance [https://github.com/OSGeo/grass/pull/6150 #6150]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 10''' (August 4 - August 10) ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 11''' (August 11 - August 17) ||&lt;br /&gt;
# Add JSON and CSV support for r.distance [https://github.com/OSGeo/grass/pull/6204 #6204]&lt;br /&gt;
# Add more test cases in v.class [https://github.com/OSGeo/grass/pull/6205 #6205]&lt;br /&gt;
# Add JSON and CSV support for v.class [https://github.com/OSGeo/grass/pull/6210 #6210]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 12''' (August 18 - August 24) ||&lt;br /&gt;
# Update JSON output format for v.what [https://github.com/OSGeo/grass/pull/6252 #6252]&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Evaluation Period &lt;br /&gt;
|-&lt;br /&gt;
| August 25 - September 1 ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
# Submit code, final evaluation and write the final GSoC report.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Reports =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* Introduced myself on the [https://discourse.osgeo.org/t/gsoc-2025-introduction-nishant-bansal/147005 OSGeo Discourse mailing list].&lt;br /&gt;
* Created both my [https://wiki.osgeo.org/wiki/User:Nishantbansal2003 personal Wiki page] and the [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C project Wiki page], adding all necessary project-related information.&lt;br /&gt;
* Read GRASS documentation to support the addition of Python and JSON examples.&lt;br /&gt;
* Worked on the following pull requests:&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5688 #5688]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5773 #5773]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5775 #5775]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5784 #5784]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5785 #5785]&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to the g.mapset and r.what.color modules.&lt;br /&gt;
* If time permits, I will begin improving the r.info interface: [https://github.com/OSGeo/grass/issues/5793 Issue #5793]&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
'''Project Discussions and Meetings'''&lt;br /&gt;
* '''14 May 2025''': Introductory meeting discussing JSON support and overall project milestones.&lt;br /&gt;
* '''21 May 2025''': Introduction with fellow developers. Discussed priority tools, adding Python/Pandas examples, and approaches for finalizing the JSON schema for each module.&lt;br /&gt;
&lt;br /&gt;
== Week-1 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.mapset''': Added JSON output support, now you can use -p and -l flags to get JSON-formatted results.&lt;br /&gt;
* '''r.univar''': Fixed a bug causing an uninitialized zone_value.&lt;br /&gt;
* '''r.what.color''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5822 #5822])&lt;br /&gt;
* '''r.info (regression tests)''': To maintain backward compatibility while updating its interface, I added strong regression tests.&lt;br /&gt;
* '''r.info (interface improvements)''': Began improving the module’s interface. (See PR [https://github.com/OSGeo/grass/pull/5859 #5859])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.version (see issue [https://github.com/OSGeo/grass/issues/5816 #5816]).&lt;br /&gt;
* Add JSON output support to i.group (see issue [https://github.com/OSGeo/grass/issues/5815 #5815]).&lt;br /&gt;
* If time permits, write tests for r.stats (see issue [https://github.com/OSGeo/grass/issues/5814 #5814]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-2 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.version''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5863 #5863])&lt;br /&gt;
* '''i.group''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5870 #5870])&lt;br /&gt;
* '''r.stats (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats''': Added tests for JSON output; this uncovered a bug, which was fixed alongside.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.distance (see issue [https://github.com/OSGeo/grass/issues/5846 #5846]).&lt;br /&gt;
* Add JSON output support to g.list (see issue [https://github.com/OSGeo/grass/issues/5848 #5848]).&lt;br /&gt;
* If time permits, fix the JSON output format of g.region (see issue [https://github.com/OSGeo/grass/issues/5828 #5828]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-3 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.distance''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5898 #5898])&lt;br /&gt;
* '''r.stats''': Fixed a bug causing an uninitialized &amp;lt;code&amp;gt;window&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
* '''g.list (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''g.list''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5921 #5921])&lt;br /&gt;
* '''g.region''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5929 #5929])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.to.db (see issue [https://github.com/OSGeo/grass/pull/5711 #5711]).&lt;br /&gt;
* Update JSON output format and documentation of r.profile (see issue [https://github.com/OSGeo/grass/pull/5834 #5834]).&lt;br /&gt;
* If time permits, add shell and csv output formats to r.univar (see issue [https://github.com/OSGeo/grass/pull/5824 #5824]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-4 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.to.db''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5946 #5946])&lt;br /&gt;
* '''r.profile''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5962 #5962])&lt;br /&gt;
* '''r.univar''': Implemented SHELL and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/5966 #5966])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.regression.line (see issue [https://github.com/OSGeo/grass/pull/5950 #5950]).&lt;br /&gt;
* Add JSON output support to r.stats.quantile (see issue [https://github.com/OSGeo/grass/pull/5951 #5951]).&lt;br /&gt;
* Add JSON output support to r.volume (see issue [https://github.com/OSGeo/grass/pull/5949 #5949]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-5 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.line (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.line''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5993 #5993])&lt;br /&gt;
* '''r.stats.quantile (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats.quantile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6007 #6007])&lt;br /&gt;
* '''r.volume (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.volume''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6036 #6036])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to m.measure (see issue [https://github.com/OSGeo/grass/pull/6006 #6006]).&lt;br /&gt;
* Add JSON output support to db.columns (see issue [https://github.com/OSGeo/grass/pull/6008 #6008]).&lt;br /&gt;
* Add JSON output support to db.connect (see issue [https://github.com/OSGeo/grass/pull/6009 #6009]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-6 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''db.columns''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6042 #6042])&lt;br /&gt;
* '''m.measure (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''m.measure''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6053 #6053])&lt;br /&gt;
* '''db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6059 #6059])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to v.db.connect (see issue [https://github.com/OSGeo/grass/pull/6014 #6014]).&lt;br /&gt;
* Add JSON output support to r.regression.multi (see issue [https://github.com/OSGeo/grass/pull/6010 #6010]).&lt;br /&gt;
* If time permits, add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* If time permits, add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-7 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.multi (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''v.db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.multi''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6075 #6075])&lt;br /&gt;
* '''v.db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6077 #6077])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* Add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
* If time permits, add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-8 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.findfile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6091 #6091])&lt;br /&gt;
* '''r3.info (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a flag-handling bug.&lt;br /&gt;
* '''r3.info''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6103 #6103])&lt;br /&gt;
* '''v.what.rast (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a sorting bug.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
* Update format to CSV instead of shell in v.category (see issue [https://github.com/OSGeo/grass/pull/6025 #6025]).&lt;br /&gt;
* Add CSV output support to r.stats (see issue [https://github.com/OSGeo/grass/issues/5835 #5835]).&lt;br /&gt;
* If time permits, add CSV output support to r.profile (see issue [https://github.com/OSGeo/grass/issues/5958 #5958]).&lt;br /&gt;
* If time permits, add CSV headers to r.volume (see issue [https://github.com/OSGeo/grass/issues/6049 #6049]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I don’t have any blockers this week. However, I’ll be a little busy with some personal work from August 3 to August 10, so I’ll try to complete next week’s tasks this week itself.&lt;br /&gt;
&lt;br /&gt;
== Week-9 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.category''': Updated format to CSV instead of shell. (See PR [https://github.com/OSGeo/grass/pull/6132 #6132])&lt;br /&gt;
* '''r.stats''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6133 #6133])&lt;br /&gt;
* '''r.volume''': Implemented CSV column headers support. (See PR [https://github.com/OSGeo/grass/pull/6134 #6134])&lt;br /&gt;
* '''v.what.rast''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6140 #6140])&lt;br /&gt;
* '''r.profile''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6145 #6145])&lt;br /&gt;
* '''r.distance (regression tests)''': Updated regression tests to ensure backward compatibility with new JSON support. (See PR [https://github.com/OSGeo/grass/pull/6150 #6150])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* I’ll be a bit busy with some personal work from August 3 to 10, so I completed next week’s tasks last week itself. I’ve already informed my mentors about my limited availability.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* Yes, I’ll be a bit busy with some personal work from August 3 to 10.&lt;br /&gt;
&lt;br /&gt;
== Week-10 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* This week I was busy with some personal work, so I did not complete any additional tasks. However, I had already finished this week’s tasks last week. This week, I mostly focused on handling reviews for those PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.distance (see issue [https://github.com/OSGeo/grass/issues/6135 #6135]).&lt;br /&gt;
* Add JSON output support to v.class (see issue [https://github.com/OSGeo/grass/issues/6136 #6136]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-11 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.distance''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6204 #6204])&lt;br /&gt;
* '''v.class''': Updated regression tests to ensure backward compatibility with new JSON support and fixed a out-of-bounds bug. (See PR [https://github.com/OSGeo/grass/pull/6205 #6205])&lt;br /&gt;
* '''v.class''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6210 #6210])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Discuss next week’s tasks with my mentors, if no issues are assigned, I’ll identify tools that currently lack JSON support and evaluate which ones are feasible to add it to.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-12 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.what''': Update JSON output format. (See PR [https://github.com/OSGeo/grass/pull/6252 #6252])&lt;br /&gt;
* Addressed review comments on my open PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
= Log of Pull Requests =&lt;br /&gt;
Below is a list of pull requests submitted to the GRASS repository during GSoC 2025:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pull Request !! Description  !! Date   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5688 #5688] || r.univar: Fix JSON structure || May 20, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5773 #5773] || r.what.color: Add test file || May 25, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5775 #5775] || g.mapset: Add test file || May 26, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5784 #5784] || r.info: Add Python example || May 28, 2025  || Closed&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5785 #5785] || g.region: Add Python example || May 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5810 #5810] || g.mapset: Add JSON support || June 2, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5821 #5821] || r.univar: Fix uninitialized zone_value || June 3, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5822 #5822] || r.what.color: Add JSON support || June 3, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5842 #5842] || r.info: Update test file || June 5, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5859 #5859] || r.info: Improve interface || June 7, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5863 #5863] || g.version: Add JSON support || June 9, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5870 #5870] || i.group: Add JSON support || June 10, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5879 #5879] || r.stats: Add test file || June 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5892 #5892] || r.stats: Add tests for JSON output || June 14, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5898 #5898] || v.distance: Update JSON format || June 16, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5900 #5900] || r.stats: fix uninitialised window value || June 17, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5906 #5906] || g.list: Add test file || June 17, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5921 #5921] || g.list: Add JSON support || June 20, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5929 #5929] || g.region: Update JSON format || June 21, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5946 #5946] || v.to.db: Update JSON format || June 23, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5962 #5962] || r.profile: Update JSON format || June 25, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5966 #5966] || r.univar: Add shell and CSV format || June 25, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5990 #5990] || r.regression.line: Add test file || June 30, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5993 #5993] || r.regression.line: Add JSON support || June 30, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6002 #6002] || r.stats.quantile: Add test file || July 1, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6007 #6007] || r.stats.quantile: Add JSON support || July 1, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6027 #6027] || r.volume: Add test file || July 4, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6036 #6036] || r.volume: Add JSON support || July 6, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6042 #6042] || db.columns: Add JSON support || July 7, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6051 #6051] || m.measure: Add test file || July 10, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6052 #6052] || db.connect: Add test file || July 10, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6053 #6053] || m.measure: Add JSON support || July 11, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6059 #6059] || db.connect: Add JSON support || July 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6066 #6066] || r.regression.multi: Add test file || July 15, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6067 #6067] || v.db.connect: Add test file || July 15, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6075 #6075] || r.regression.multi: Add JSON support || July 18, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6077 #6077] || v.db.connect: Add JSON support || July 19, 2025  || Open&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6091 #6091] || g.findfile: Add JSON support || July 21, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6098 #6098] || r3.info: Add test file || July 22, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6103 #6103] || r3.info: Add JSON support || July 23, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6109 #6109] || v.what.rast: Add test file || July 24, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6132 #6132] || v.category: Use CSV format instead of shell format || July 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6133 #6133] || r.stats: add CSV support || July 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6134 #6134] || r.volume: add csv column headers || July 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6140 #6140] || v.what.rast: Add JSON support || July 29, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6145 #6145] || r.profile: Add CSV support || July 30, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6150 #6150] || r.distance: Update existing test cases || August 1, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6204 #6204] || r.distance: Add JSON and CSV support || August 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6205 #6205] || v.class: Add more test cases and fix out-of-bounds bug || August 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6210 #6210] || v.class: Add JSON and CSV support || August 15, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6252 #6252] || v.what: Update JSON output format || August 23, 2025  || Open&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{GSoC}}&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28646</id>
		<title>GRASS GSoC 2025 Add JSON output to different tools in C</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28646"/>
		<updated>2025-08-23T10:01:11Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: /* Timeline */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Nishant Bansal&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo - Open Source Geospatial Foundation]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/NishantBansal2003/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''GSoC proposal''' || [https://docs.google.com/document/d/1ZPQ9RXU7b_RUDmBmAMeK7ZjFAV1WC7Urd1Zlz678jyw/edit?tab=t.0#heading=h.z6ne0og04bp5 View Proposal]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Abstract =&lt;br /&gt;
Currently, most GRASS tools produce data in plain text by default. This means that users who want to process the output in Python need to create custom parsing code. To make this easier, several modules could be improved by oﬀering JSON as an alternative output format. Recently, the Parson library was added to the GRASS codebase to support JSON output in addition to plain text. Building on the advancements made during the last GSoC, my project aims to expand JSON output capabilities to more tools using the Parson library. I will also work on making the JSON structure introduced in the previous GSoC more useful and consistent. Additionally, I plan to add support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
&lt;br /&gt;
# Working with mentors to finalize the structure of the JSON output.&lt;br /&gt;
# Adding an option to choose the output format (plain text or JSON) for each updated tool.&lt;br /&gt;
# Make the JSON structure introduced during the last GSoC more useful and consistent across tools.&lt;br /&gt;
# Developing Python test cases to ensure that the JSON output works correctly and to avoid future issues.&lt;br /&gt;
# Providing basic documentation and example JSON outputs for each modified tool.&lt;br /&gt;
# Adding support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
# Develop simple examples demonstrating how to use JSON output in a data science workflow, such as reading JSON data into pandas or python.&lt;br /&gt;
&lt;br /&gt;
= Timeline =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Period !! Timeline  !! Tasks   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period &lt;br /&gt;
||&lt;br /&gt;
May 8 - June 1  &lt;br /&gt;
|| &lt;br /&gt;
# Reviewed the work done during the last GSoC to stabilize the JSON output.&lt;br /&gt;
# Discussed the priority tools for adding JSON support.&lt;br /&gt;
# Read GRASS documentation to add Python and JSON examples to the documentation.&lt;br /&gt;
|| &lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;13&amp;quot; | Official Coding Period &lt;br /&gt;
|-&lt;br /&gt;
| '''Week 1''' (June 2 - June 8) || &lt;br /&gt;
# Add JSON support for g.mapset [https://github.com/OSGeo/grass/pull/5810 #5810]&lt;br /&gt;
# Fix uninitialized zone_value in r.univar [https://github.com/OSGeo/grass/pull/5821 #5821]&lt;br /&gt;
# Add JSON support for r.what.color [https://github.com/OSGeo/grass/pull/5822 #5822]&lt;br /&gt;
# Update test file in r.info [https://github.com/OSGeo/grass/pull/5842 #5842]&lt;br /&gt;
# Improve interface for r.info [https://github.com/OSGeo/grass/pull/5859 #5859]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 2''' (June 9 - June 15) ||&lt;br /&gt;
# Add JSON support for g.version [https://github.com/OSGeo/grass/pull/5863 #5863]&lt;br /&gt;
# Add JSON support for i.group [https://github.com/OSGeo/grass/pull/5870 #5870]&lt;br /&gt;
# Add test file in r.stats [https://github.com/OSGeo/grass/pull/5879 #5879]&lt;br /&gt;
# Add tests for JSON output in r.stats [https://github.com/OSGeo/grass/pull/5892 #5892]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 3''' (June 16 - June 22) ||&lt;br /&gt;
# Update the JSON output schema of v.distance [https://github.com/OSGeo/grass/pull/5898 #5898]&lt;br /&gt;
# Fix uninitialized window variable in r.stats [https://github.com/OSGeo/grass/pull/5900 #5900]&lt;br /&gt;
# Add test file in g.list [https://github.com/OSGeo/grass/pull/5906 #5906]&lt;br /&gt;
# Add JSON support for g.list [https://github.com/OSGeo/grass/pull/5921 #5921]&lt;br /&gt;
# Update the JSON output schema of g.region [https://github.com/OSGeo/grass/pull/5929 #5929]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 4''' (June 23 - June 29) ||&lt;br /&gt;
# Update the JSON output schema of v.to.db [https://github.com/OSGeo/grass/pull/5946 #5946]&lt;br /&gt;
# Update the JSON output schema of r.profile [https://github.com/OSGeo/grass/pull/5962 #5962]&lt;br /&gt;
# Add SHELL and CSV output support for r.univar [https://github.com/OSGeo/grass/pull/5966 #5966]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 5''' (June 30 - July 6) ||&lt;br /&gt;
# Add test file in r.regression.line [https://github.com/OSGeo/grass/pull/5990 #5990]&lt;br /&gt;
# Add JSON support for r.regression.line [https://github.com/OSGeo/grass/pull/5993 #5993]&lt;br /&gt;
# Add test file in r.stats.quantile [https://github.com/OSGeo/grass/pull/6002 #6002]&lt;br /&gt;
# Add JSON support for r.stats.quantile [https://github.com/OSGeo/grass/pull/6007 #6007]&lt;br /&gt;
# Add test file in r.volume [https://github.com/OSGeo/grass/pull/6027 #6027]&lt;br /&gt;
# Add JSON support for r.volume [https://github.com/OSGeo/grass/pull/6036 #6036]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 6''' (July 7 - July 13) ||&lt;br /&gt;
# Add JSON support for db.columns [https://github.com/OSGeo/grass/pull/6042 #6042]&lt;br /&gt;
# Add test file in m.measure [https://github.com/OSGeo/grass/pull/6051 #6051]&lt;br /&gt;
# Add test file in db.connect [https://github.com/OSGeo/grass/pull/6052 #6052]&lt;br /&gt;
# Add JSON support for m.measure [https://github.com/OSGeo/grass/pull/6053 #6053]&lt;br /&gt;
# Add JSON support for db.connect [https://github.com/OSGeo/grass/pull/6059 #6059]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 7''' (July 14 - July 20) ||&lt;br /&gt;
# Add test file in r.regression.multi [https://github.com/OSGeo/grass/pull/6066 #6066]&lt;br /&gt;
# Add test file in v.db.connect [https://github.com/OSGeo/grass/pull/6067 #6067]&lt;br /&gt;
# Add JSON support for r.regression.multi [https://github.com/OSGeo/grass/pull/6075 #6075]&lt;br /&gt;
# Add JSON support for v.db.connect [https://github.com/OSGeo/grass/pull/6077 #6077]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 8''' (July 21 - July 27) ||&lt;br /&gt;
# Add JSON support for g.findfile [https://github.com/OSGeo/grass/pull/6091 #6091]&lt;br /&gt;
# Add test file in r3.info [https://github.com/OSGeo/grass/pull/6098 #6098]&lt;br /&gt;
# Add JSON support for r3.info [https://github.com/OSGeo/grass/pull/6103 #6103]&lt;br /&gt;
# Add test file in v.what.rast [https://github.com/OSGeo/grass/pull/6109 #6109]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 9''' (July 28 - August 3) ||&lt;br /&gt;
# Update format to CSV instead of shell in v.category [https://github.com/OSGeo/grass/pull/6132 #6132]&lt;br /&gt;
# Add CSV output support to r.stats [https://github.com/OSGeo/grass/pull/6133 #6133]&lt;br /&gt;
# Add CSV headers to r.volume [https://github.com/OSGeo/grass/pull/6134 #6134]&lt;br /&gt;
# Add JSON support for v.what.rast [https://github.com/OSGeo/grass/pull/6140 #6140]&lt;br /&gt;
# Add CSV output support to r.profile [https://github.com/OSGeo/grass/pull/6145 #6145]&lt;br /&gt;
# Update test cases in r.distance [https://github.com/OSGeo/grass/pull/6150 #6150]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 10''' (August 4 - August 10) ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 11''' (August 11 - August 17) ||&lt;br /&gt;
# Add JSON and CSV support for r.distance [https://github.com/OSGeo/grass/pull/6204 #6204]&lt;br /&gt;
# Add more test cases in v.class [https://github.com/OSGeo/grass/pull/6205 #6205]&lt;br /&gt;
# Add JSON and CSV support for v.class [https://github.com/OSGeo/grass/pull/6210 #6210]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 12''' (August 18 - August 24) ||&lt;br /&gt;
# Update JSON output format for v.what [https://github.com/OSGeo/grass/pull/6252 #6252]&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Evaluation Period &lt;br /&gt;
|-&lt;br /&gt;
| August 25 - September 1 ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
# Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Reports =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* Introduced myself on the [https://discourse.osgeo.org/t/gsoc-2025-introduction-nishant-bansal/147005 OSGeo Discourse mailing list].&lt;br /&gt;
* Created both my [https://wiki.osgeo.org/wiki/User:Nishantbansal2003 personal Wiki page] and the [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C project Wiki page], adding all necessary project-related information.&lt;br /&gt;
* Read GRASS documentation to support the addition of Python and JSON examples.&lt;br /&gt;
* Worked on the following pull requests:&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5688 #5688]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5773 #5773]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5775 #5775]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5784 #5784]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5785 #5785]&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to the g.mapset and r.what.color modules.&lt;br /&gt;
* If time permits, I will begin improving the r.info interface: [https://github.com/OSGeo/grass/issues/5793 Issue #5793]&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
'''Project Discussions and Meetings'''&lt;br /&gt;
* '''14 May 2025''': Introductory meeting discussing JSON support and overall project milestones.&lt;br /&gt;
* '''21 May 2025''': Introduction with fellow developers. Discussed priority tools, adding Python/Pandas examples, and approaches for finalizing the JSON schema for each module.&lt;br /&gt;
&lt;br /&gt;
== Week-1 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.mapset''': Added JSON output support, now you can use -p and -l flags to get JSON-formatted results.&lt;br /&gt;
* '''r.univar''': Fixed a bug causing an uninitialized zone_value.&lt;br /&gt;
* '''r.what.color''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5822 #5822])&lt;br /&gt;
* '''r.info (regression tests)''': To maintain backward compatibility while updating its interface, I added strong regression tests.&lt;br /&gt;
* '''r.info (interface improvements)''': Began improving the module’s interface. (See PR [https://github.com/OSGeo/grass/pull/5859 #5859])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.version (see issue [https://github.com/OSGeo/grass/issues/5816 #5816]).&lt;br /&gt;
* Add JSON output support to i.group (see issue [https://github.com/OSGeo/grass/issues/5815 #5815]).&lt;br /&gt;
* If time permits, write tests for r.stats (see issue [https://github.com/OSGeo/grass/issues/5814 #5814]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-2 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.version''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5863 #5863])&lt;br /&gt;
* '''i.group''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5870 #5870])&lt;br /&gt;
* '''r.stats (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats''': Added tests for JSON output; this uncovered a bug, which was fixed alongside.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.distance (see issue [https://github.com/OSGeo/grass/issues/5846 #5846]).&lt;br /&gt;
* Add JSON output support to g.list (see issue [https://github.com/OSGeo/grass/issues/5848 #5848]).&lt;br /&gt;
* If time permits, fix the JSON output format of g.region (see issue [https://github.com/OSGeo/grass/issues/5828 #5828]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-3 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.distance''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5898 #5898])&lt;br /&gt;
* '''r.stats''': Fixed a bug causing an uninitialized &amp;lt;code&amp;gt;window&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
* '''g.list (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''g.list''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5921 #5921])&lt;br /&gt;
* '''g.region''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5929 #5929])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.to.db (see issue [https://github.com/OSGeo/grass/pull/5711 #5711]).&lt;br /&gt;
* Update JSON output format and documentation of r.profile (see issue [https://github.com/OSGeo/grass/pull/5834 #5834]).&lt;br /&gt;
* If time permits, add shell and csv output formats to r.univar (see issue [https://github.com/OSGeo/grass/pull/5824 #5824]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-4 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.to.db''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5946 #5946])&lt;br /&gt;
* '''r.profile''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5962 #5962])&lt;br /&gt;
* '''r.univar''': Implemented SHELL and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/5966 #5966])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.regression.line (see issue [https://github.com/OSGeo/grass/pull/5950 #5950]).&lt;br /&gt;
* Add JSON output support to r.stats.quantile (see issue [https://github.com/OSGeo/grass/pull/5951 #5951]).&lt;br /&gt;
* Add JSON output support to r.volume (see issue [https://github.com/OSGeo/grass/pull/5949 #5949]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-5 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.line (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.line''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5993 #5993])&lt;br /&gt;
* '''r.stats.quantile (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats.quantile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6007 #6007])&lt;br /&gt;
* '''r.volume (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.volume''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6036 #6036])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to m.measure (see issue [https://github.com/OSGeo/grass/pull/6006 #6006]).&lt;br /&gt;
* Add JSON output support to db.columns (see issue [https://github.com/OSGeo/grass/pull/6008 #6008]).&lt;br /&gt;
* Add JSON output support to db.connect (see issue [https://github.com/OSGeo/grass/pull/6009 #6009]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-6 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''db.columns''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6042 #6042])&lt;br /&gt;
* '''m.measure (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''m.measure''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6053 #6053])&lt;br /&gt;
* '''db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6059 #6059])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to v.db.connect (see issue [https://github.com/OSGeo/grass/pull/6014 #6014]).&lt;br /&gt;
* Add JSON output support to r.regression.multi (see issue [https://github.com/OSGeo/grass/pull/6010 #6010]).&lt;br /&gt;
* If time permits, add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* If time permits, add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-7 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.multi (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''v.db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.multi''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6075 #6075])&lt;br /&gt;
* '''v.db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6077 #6077])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* Add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
* If time permits, add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-8 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.findfile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6091 #6091])&lt;br /&gt;
* '''r3.info (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a flag-handling bug.&lt;br /&gt;
* '''r3.info''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6103 #6103])&lt;br /&gt;
* '''v.what.rast (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a sorting bug.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
* Update format to CSV instead of shell in v.category (see issue [https://github.com/OSGeo/grass/pull/6025 #6025]).&lt;br /&gt;
* Add CSV output support to r.stats (see issue [https://github.com/OSGeo/grass/issues/5835 #5835]).&lt;br /&gt;
* If time permits, add CSV output support to r.profile (see issue [https://github.com/OSGeo/grass/issues/5958 #5958]).&lt;br /&gt;
* If time permits, add CSV headers to r.volume (see issue [https://github.com/OSGeo/grass/issues/6049 #6049]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I don’t have any blockers this week. However, I’ll be a little busy with some personal work from August 3 to August 10, so I’ll try to complete next week’s tasks this week itself.&lt;br /&gt;
&lt;br /&gt;
== Week-9 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.category''': Updated format to CSV instead of shell. (See PR [https://github.com/OSGeo/grass/pull/6132 #6132])&lt;br /&gt;
* '''r.stats''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6133 #6133])&lt;br /&gt;
* '''r.volume''': Implemented CSV column headers support. (See PR [https://github.com/OSGeo/grass/pull/6134 #6134])&lt;br /&gt;
* '''v.what.rast''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6140 #6140])&lt;br /&gt;
* '''r.profile''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6145 #6145])&lt;br /&gt;
* '''r.distance (regression tests)''': Updated regression tests to ensure backward compatibility with new JSON support. (See PR [https://github.com/OSGeo/grass/pull/6150 #6150])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* I’ll be a bit busy with some personal work from August 3 to 10, so I completed next week’s tasks last week itself. I’ve already informed my mentors about my limited availability.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* Yes, I’ll be a bit busy with some personal work from August 3 to 10.&lt;br /&gt;
&lt;br /&gt;
== Week-10 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* This week I was busy with some personal work, so I did not complete any additional tasks. However, I had already finished this week’s tasks last week. This week, I mostly focused on handling reviews for those PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.distance (see issue [https://github.com/OSGeo/grass/issues/6135 #6135]).&lt;br /&gt;
* Add JSON output support to v.class (see issue [https://github.com/OSGeo/grass/issues/6136 #6136]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-11 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.distance''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6204 #6204])&lt;br /&gt;
* '''v.class''': Updated regression tests to ensure backward compatibility with new JSON support and fixed a out-of-bounds bug. (See PR [https://github.com/OSGeo/grass/pull/6205 #6205])&lt;br /&gt;
* '''v.class''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6210 #6210])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Discuss next week’s tasks with my mentors, if no issues are assigned, I’ll identify tools that currently lack JSON support and evaluate which ones are feasible to add it to.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-12 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.what''': Update JSON output format. (See PR [https://github.com/OSGeo/grass/pull/6252 #6252])&lt;br /&gt;
* Addressed review comments on my open PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
= Log of Pull Requests =&lt;br /&gt;
Below is a list of pull requests submitted to the GRASS repository during GSoC 2025:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pull Request !! Description  !! Date   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5688 #5688] || r.univar: Fix JSON structure || May 20, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5773 #5773] || r.what.color: Add test file || May 25, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5775 #5775] || g.mapset: Add test file || May 26, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5784 #5784] || r.info: Add Python example || May 28, 2025  || Closed&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5785 #5785] || g.region: Add Python example || May 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5810 #5810] || g.mapset: Add JSON support || June 2, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5821 #5821] || r.univar: Fix uninitialized zone_value || June 3, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5822 #5822] || r.what.color: Add JSON support || June 3, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5842 #5842] || r.info: Update test file || June 5, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5859 #5859] || r.info: Improve interface || June 7, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5863 #5863] || g.version: Add JSON support || June 9, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5870 #5870] || i.group: Add JSON support || June 10, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5879 #5879] || r.stats: Add test file || June 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5892 #5892] || r.stats: Add tests for JSON output || June 14, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5898 #5898] || v.distance: Update JSON format || June 16, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5900 #5900] || r.stats: fix uninitialised window value || June 17, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5906 #5906] || g.list: Add test file || June 17, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5921 #5921] || g.list: Add JSON support || June 20, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5929 #5929] || g.region: Update JSON format || June 21, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5946 #5946] || v.to.db: Update JSON format || June 23, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5962 #5962] || r.profile: Update JSON format || June 25, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5966 #5966] || r.univar: Add shell and CSV format || June 25, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5990 #5990] || r.regression.line: Add test file || June 30, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5993 #5993] || r.regression.line: Add JSON support || June 30, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6002 #6002] || r.stats.quantile: Add test file || July 1, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6007 #6007] || r.stats.quantile: Add JSON support || July 1, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6027 #6027] || r.volume: Add test file || July 4, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6036 #6036] || r.volume: Add JSON support || July 6, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6042 #6042] || db.columns: Add JSON support || July 7, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6051 #6051] || m.measure: Add test file || July 10, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6052 #6052] || db.connect: Add test file || July 10, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6053 #6053] || m.measure: Add JSON support || July 11, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6059 #6059] || db.connect: Add JSON support || July 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6066 #6066] || r.regression.multi: Add test file || July 15, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6067 #6067] || v.db.connect: Add test file || July 15, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6075 #6075] || r.regression.multi: Add JSON support || July 18, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6077 #6077] || v.db.connect: Add JSON support || July 19, 2025  || Open&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6091 #6091] || g.findfile: Add JSON support || July 21, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6098 #6098] || r3.info: Add test file || July 22, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6103 #6103] || r3.info: Add JSON support || July 23, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6109 #6109] || v.what.rast: Add test file || July 24, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6132 #6132] || v.category: Use CSV format instead of shell format || July 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6133 #6133] || r.stats: add CSV support || July 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6134 #6134] || r.volume: add csv column headers || July 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6140 #6140] || v.what.rast: Add JSON support || July 29, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6145 #6145] || r.profile: Add CSV support || July 30, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6150 #6150] || r.distance: Update existing test cases || August 1, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6204 #6204] || r.distance: Add JSON and CSV support || August 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6205 #6205] || v.class: Add more test cases and fix out-of-bounds bug || August 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6210 #6210] || v.class: Add JSON and CSV support || August 15, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6252 #6252] || v.what: Update JSON output format || August 23, 2025  || Open&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{GSoC}}&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28645</id>
		<title>GRASS GSoC 2025 Add JSON output to different tools in C</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28645"/>
		<updated>2025-08-23T09:58:29Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: /* Timeline */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Nishant Bansal&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo - Open Source Geospatial Foundation]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/NishantBansal2003/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''GSoC proposal''' || [https://docs.google.com/document/d/1ZPQ9RXU7b_RUDmBmAMeK7ZjFAV1WC7Urd1Zlz678jyw/edit?tab=t.0#heading=h.z6ne0og04bp5 View Proposal]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Abstract =&lt;br /&gt;
Currently, most GRASS tools produce data in plain text by default. This means that users who want to process the output in Python need to create custom parsing code. To make this easier, several modules could be improved by oﬀering JSON as an alternative output format. Recently, the Parson library was added to the GRASS codebase to support JSON output in addition to plain text. Building on the advancements made during the last GSoC, my project aims to expand JSON output capabilities to more tools using the Parson library. I will also work on making the JSON structure introduced in the previous GSoC more useful and consistent. Additionally, I plan to add support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
&lt;br /&gt;
# Working with mentors to finalize the structure of the JSON output.&lt;br /&gt;
# Adding an option to choose the output format (plain text or JSON) for each updated tool.&lt;br /&gt;
# Make the JSON structure introduced during the last GSoC more useful and consistent across tools.&lt;br /&gt;
# Developing Python test cases to ensure that the JSON output works correctly and to avoid future issues.&lt;br /&gt;
# Providing basic documentation and example JSON outputs for each modified tool.&lt;br /&gt;
# Adding support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
# Develop simple examples demonstrating how to use JSON output in a data science workflow, such as reading JSON data into pandas or python.&lt;br /&gt;
&lt;br /&gt;
= Timeline =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Period !! Timeline  !! Tasks   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period &lt;br /&gt;
||&lt;br /&gt;
May 8 - June 1  &lt;br /&gt;
|| &lt;br /&gt;
# Reviewed the work done during the last GSoC to stabilize the JSON output.&lt;br /&gt;
# Discussed the priority tools for adding JSON support.&lt;br /&gt;
# Read GRASS documentation to add Python and JSON examples to the documentation.&lt;br /&gt;
|| &lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;13&amp;quot; | Official Coding Period &lt;br /&gt;
|-&lt;br /&gt;
| '''Week 1''' (June 2 - June 8) || &lt;br /&gt;
# Add JSON support for g.mapset [https://github.com/OSGeo/grass/pull/5810 #5810]&lt;br /&gt;
# Fix uninitialized zone_value in r.univar [https://github.com/OSGeo/grass/pull/5821 #5821]&lt;br /&gt;
# Add JSON support for r.what.color [https://github.com/OSGeo/grass/pull/5822 #5822]&lt;br /&gt;
# Update test file in r.info [https://github.com/OSGeo/grass/pull/5842 #5842]&lt;br /&gt;
# Improve interface for r.info [https://github.com/OSGeo/grass/pull/5859 #5859]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 2''' (June 9 - June 15) ||&lt;br /&gt;
# Add JSON support for g.version [https://github.com/OSGeo/grass/pull/5863 #5863]&lt;br /&gt;
# Add JSON support for i.group [https://github.com/OSGeo/grass/pull/5870 #5870]&lt;br /&gt;
# Add test file in r.stats [https://github.com/OSGeo/grass/pull/5879 #5879]&lt;br /&gt;
# Add tests for JSON output in r.stats [https://github.com/OSGeo/grass/pull/5892 #5892]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 3''' (June 16 - June 22) ||&lt;br /&gt;
# Update the JSON output schema of v.distance [https://github.com/OSGeo/grass/pull/5898 #5898]&lt;br /&gt;
# Fix uninitialized window variable in r.stats [https://github.com/OSGeo/grass/pull/5900 #5900]&lt;br /&gt;
# Add test file in g.list [https://github.com/OSGeo/grass/pull/5906 #5906]&lt;br /&gt;
# Add JSON support for g.list [https://github.com/OSGeo/grass/pull/5921 #5921]&lt;br /&gt;
# Update the JSON output schema of g.region [https://github.com/OSGeo/grass/pull/5929 #5929]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 4''' (June 23 - June 29) ||&lt;br /&gt;
# Update the JSON output schema of v.to.db [https://github.com/OSGeo/grass/pull/5946 #5946]&lt;br /&gt;
# Update the JSON output schema of r.profile [https://github.com/OSGeo/grass/pull/5962 #5962]&lt;br /&gt;
# Add SHELL and CSV output support for r.univar [https://github.com/OSGeo/grass/pull/5966 #5966]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 5''' (June 30 - July 6) ||&lt;br /&gt;
# Add test file in r.regression.line [https://github.com/OSGeo/grass/pull/5990 #5990]&lt;br /&gt;
# Add JSON support for r.regression.line [https://github.com/OSGeo/grass/pull/5993 #5993]&lt;br /&gt;
# Add test file in r.stats.quantile [https://github.com/OSGeo/grass/pull/6002 #6002]&lt;br /&gt;
# Add JSON support for r.stats.quantile [https://github.com/OSGeo/grass/pull/6007 #6007]&lt;br /&gt;
# Add test file in r.volume [https://github.com/OSGeo/grass/pull/6027 #6027]&lt;br /&gt;
# Add JSON support for r.volume [https://github.com/OSGeo/grass/pull/6036 #6036]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 6''' (July 7 - July 13) ||&lt;br /&gt;
# Add JSON support for db.columns [https://github.com/OSGeo/grass/pull/6042 #6042]&lt;br /&gt;
# Add test file in m.measure [https://github.com/OSGeo/grass/pull/6051 #6051]&lt;br /&gt;
# Add test file in db.connect [https://github.com/OSGeo/grass/pull/6052 #6052]&lt;br /&gt;
# Add JSON support for m.measure [https://github.com/OSGeo/grass/pull/6053 #6053]&lt;br /&gt;
# Add JSON support for db.connect [https://github.com/OSGeo/grass/pull/6059 #6059]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 7''' (July 14 - July 20) ||&lt;br /&gt;
# Add test file in r.regression.multi [https://github.com/OSGeo/grass/pull/6066 #6066]&lt;br /&gt;
# Add test file in v.db.connect [https://github.com/OSGeo/grass/pull/6067 #6067]&lt;br /&gt;
# Add JSON support for r.regression.multi [https://github.com/OSGeo/grass/pull/6075 #6075]&lt;br /&gt;
# Add JSON support for v.db.connect [https://github.com/OSGeo/grass/pull/6077 #6077]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 8''' (July 21 - July 27) ||&lt;br /&gt;
# Add JSON support for g.findfile [https://github.com/OSGeo/grass/pull/6091 #6091]&lt;br /&gt;
# Add test file in r3.info [https://github.com/OSGeo/grass/pull/6098 #6098]&lt;br /&gt;
# Add JSON support for r3.info [https://github.com/OSGeo/grass/pull/6103 #6103]&lt;br /&gt;
# Add test file in v.what.rast [https://github.com/OSGeo/grass/pull/6109 #6109]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 9''' (July 28 - August 3) ||&lt;br /&gt;
# Update format to CSV instead of shell in v.category [https://github.com/OSGeo/grass/pull/6132 #6132]&lt;br /&gt;
# Add CSV output support to r.stats [https://github.com/OSGeo/grass/pull/6133 #6133]&lt;br /&gt;
# Add CSV headers to r.volume [https://github.com/OSGeo/grass/pull/6134 #6134]&lt;br /&gt;
# Add JSON support for v.what.rast [https://github.com/OSGeo/grass/pull/6140 #6140]&lt;br /&gt;
# Add CSV output support to r.profile [https://github.com/OSGeo/grass/pull/6145 #6145]&lt;br /&gt;
# Update test cases in r.distance [https://github.com/OSGeo/grass/pull/6150 #6150]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 10''' (August 4 - August 10) ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 11''' (August 11 - August 17) ||&lt;br /&gt;
# Add JSON and CSV support for r.distance [https://github.com/OSGeo/grass/pull/6204 #6204]&lt;br /&gt;
# Add more test cases in v.class [https://github.com/OSGeo/grass/pull/6205 #6205]&lt;br /&gt;
# Add JSON and CSV support for v.class [https://github.com/OSGeo/grass/pull/6210 #6210]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 12''' (August 18 - August 24) ||&lt;br /&gt;
# Update JSON output format for v.what [https://github.com/OSGeo/grass/pull/6252 #6252]&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Evaluation Period &lt;br /&gt;
|-&lt;br /&gt;
| August 25 - September 1 ||  || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Reports =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* Introduced myself on the [https://discourse.osgeo.org/t/gsoc-2025-introduction-nishant-bansal/147005 OSGeo Discourse mailing list].&lt;br /&gt;
* Created both my [https://wiki.osgeo.org/wiki/User:Nishantbansal2003 personal Wiki page] and the [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C project Wiki page], adding all necessary project-related information.&lt;br /&gt;
* Read GRASS documentation to support the addition of Python and JSON examples.&lt;br /&gt;
* Worked on the following pull requests:&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5688 #5688]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5773 #5773]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5775 #5775]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5784 #5784]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5785 #5785]&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to the g.mapset and r.what.color modules.&lt;br /&gt;
* If time permits, I will begin improving the r.info interface: [https://github.com/OSGeo/grass/issues/5793 Issue #5793]&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
'''Project Discussions and Meetings'''&lt;br /&gt;
* '''14 May 2025''': Introductory meeting discussing JSON support and overall project milestones.&lt;br /&gt;
* '''21 May 2025''': Introduction with fellow developers. Discussed priority tools, adding Python/Pandas examples, and approaches for finalizing the JSON schema for each module.&lt;br /&gt;
&lt;br /&gt;
== Week-1 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.mapset''': Added JSON output support, now you can use -p and -l flags to get JSON-formatted results.&lt;br /&gt;
* '''r.univar''': Fixed a bug causing an uninitialized zone_value.&lt;br /&gt;
* '''r.what.color''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5822 #5822])&lt;br /&gt;
* '''r.info (regression tests)''': To maintain backward compatibility while updating its interface, I added strong regression tests.&lt;br /&gt;
* '''r.info (interface improvements)''': Began improving the module’s interface. (See PR [https://github.com/OSGeo/grass/pull/5859 #5859])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.version (see issue [https://github.com/OSGeo/grass/issues/5816 #5816]).&lt;br /&gt;
* Add JSON output support to i.group (see issue [https://github.com/OSGeo/grass/issues/5815 #5815]).&lt;br /&gt;
* If time permits, write tests for r.stats (see issue [https://github.com/OSGeo/grass/issues/5814 #5814]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-2 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.version''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5863 #5863])&lt;br /&gt;
* '''i.group''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5870 #5870])&lt;br /&gt;
* '''r.stats (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats''': Added tests for JSON output; this uncovered a bug, which was fixed alongside.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.distance (see issue [https://github.com/OSGeo/grass/issues/5846 #5846]).&lt;br /&gt;
* Add JSON output support to g.list (see issue [https://github.com/OSGeo/grass/issues/5848 #5848]).&lt;br /&gt;
* If time permits, fix the JSON output format of g.region (see issue [https://github.com/OSGeo/grass/issues/5828 #5828]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-3 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.distance''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5898 #5898])&lt;br /&gt;
* '''r.stats''': Fixed a bug causing an uninitialized &amp;lt;code&amp;gt;window&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
* '''g.list (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''g.list''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5921 #5921])&lt;br /&gt;
* '''g.region''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5929 #5929])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.to.db (see issue [https://github.com/OSGeo/grass/pull/5711 #5711]).&lt;br /&gt;
* Update JSON output format and documentation of r.profile (see issue [https://github.com/OSGeo/grass/pull/5834 #5834]).&lt;br /&gt;
* If time permits, add shell and csv output formats to r.univar (see issue [https://github.com/OSGeo/grass/pull/5824 #5824]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-4 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.to.db''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5946 #5946])&lt;br /&gt;
* '''r.profile''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5962 #5962])&lt;br /&gt;
* '''r.univar''': Implemented SHELL and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/5966 #5966])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.regression.line (see issue [https://github.com/OSGeo/grass/pull/5950 #5950]).&lt;br /&gt;
* Add JSON output support to r.stats.quantile (see issue [https://github.com/OSGeo/grass/pull/5951 #5951]).&lt;br /&gt;
* Add JSON output support to r.volume (see issue [https://github.com/OSGeo/grass/pull/5949 #5949]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-5 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.line (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.line''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5993 #5993])&lt;br /&gt;
* '''r.stats.quantile (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats.quantile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6007 #6007])&lt;br /&gt;
* '''r.volume (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.volume''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6036 #6036])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to m.measure (see issue [https://github.com/OSGeo/grass/pull/6006 #6006]).&lt;br /&gt;
* Add JSON output support to db.columns (see issue [https://github.com/OSGeo/grass/pull/6008 #6008]).&lt;br /&gt;
* Add JSON output support to db.connect (see issue [https://github.com/OSGeo/grass/pull/6009 #6009]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-6 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''db.columns''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6042 #6042])&lt;br /&gt;
* '''m.measure (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''m.measure''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6053 #6053])&lt;br /&gt;
* '''db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6059 #6059])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to v.db.connect (see issue [https://github.com/OSGeo/grass/pull/6014 #6014]).&lt;br /&gt;
* Add JSON output support to r.regression.multi (see issue [https://github.com/OSGeo/grass/pull/6010 #6010]).&lt;br /&gt;
* If time permits, add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* If time permits, add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-7 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.multi (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''v.db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.multi''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6075 #6075])&lt;br /&gt;
* '''v.db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6077 #6077])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* Add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
* If time permits, add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-8 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.findfile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6091 #6091])&lt;br /&gt;
* '''r3.info (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a flag-handling bug.&lt;br /&gt;
* '''r3.info''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6103 #6103])&lt;br /&gt;
* '''v.what.rast (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a sorting bug.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
* Update format to CSV instead of shell in v.category (see issue [https://github.com/OSGeo/grass/pull/6025 #6025]).&lt;br /&gt;
* Add CSV output support to r.stats (see issue [https://github.com/OSGeo/grass/issues/5835 #5835]).&lt;br /&gt;
* If time permits, add CSV output support to r.profile (see issue [https://github.com/OSGeo/grass/issues/5958 #5958]).&lt;br /&gt;
* If time permits, add CSV headers to r.volume (see issue [https://github.com/OSGeo/grass/issues/6049 #6049]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I don’t have any blockers this week. However, I’ll be a little busy with some personal work from August 3 to August 10, so I’ll try to complete next week’s tasks this week itself.&lt;br /&gt;
&lt;br /&gt;
== Week-9 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.category''': Updated format to CSV instead of shell. (See PR [https://github.com/OSGeo/grass/pull/6132 #6132])&lt;br /&gt;
* '''r.stats''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6133 #6133])&lt;br /&gt;
* '''r.volume''': Implemented CSV column headers support. (See PR [https://github.com/OSGeo/grass/pull/6134 #6134])&lt;br /&gt;
* '''v.what.rast''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6140 #6140])&lt;br /&gt;
* '''r.profile''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6145 #6145])&lt;br /&gt;
* '''r.distance (regression tests)''': Updated regression tests to ensure backward compatibility with new JSON support. (See PR [https://github.com/OSGeo/grass/pull/6150 #6150])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* I’ll be a bit busy with some personal work from August 3 to 10, so I completed next week’s tasks last week itself. I’ve already informed my mentors about my limited availability.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* Yes, I’ll be a bit busy with some personal work from August 3 to 10.&lt;br /&gt;
&lt;br /&gt;
== Week-10 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* This week I was busy with some personal work, so I did not complete any additional tasks. However, I had already finished this week’s tasks last week. This week, I mostly focused on handling reviews for those PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.distance (see issue [https://github.com/OSGeo/grass/issues/6135 #6135]).&lt;br /&gt;
* Add JSON output support to v.class (see issue [https://github.com/OSGeo/grass/issues/6136 #6136]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-11 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.distance''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6204 #6204])&lt;br /&gt;
* '''v.class''': Updated regression tests to ensure backward compatibility with new JSON support and fixed a out-of-bounds bug. (See PR [https://github.com/OSGeo/grass/pull/6205 #6205])&lt;br /&gt;
* '''v.class''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6210 #6210])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Discuss next week’s tasks with my mentors, if no issues are assigned, I’ll identify tools that currently lack JSON support and evaluate which ones are feasible to add it to.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-12 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.what''': Update JSON output format. (See PR [https://github.com/OSGeo/grass/pull/6252 #6252])&lt;br /&gt;
* Addressed review comments on my open PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
= Log of Pull Requests =&lt;br /&gt;
Below is a list of pull requests submitted to the GRASS repository during GSoC 2025:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pull Request !! Description  !! Date   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5688 #5688] || r.univar: Fix JSON structure || May 20, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5773 #5773] || r.what.color: Add test file || May 25, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5775 #5775] || g.mapset: Add test file || May 26, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5784 #5784] || r.info: Add Python example || May 28, 2025  || Closed&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5785 #5785] || g.region: Add Python example || May 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5810 #5810] || g.mapset: Add JSON support || June 2, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5821 #5821] || r.univar: Fix uninitialized zone_value || June 3, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5822 #5822] || r.what.color: Add JSON support || June 3, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5842 #5842] || r.info: Update test file || June 5, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5859 #5859] || r.info: Improve interface || June 7, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5863 #5863] || g.version: Add JSON support || June 9, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5870 #5870] || i.group: Add JSON support || June 10, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5879 #5879] || r.stats: Add test file || June 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5892 #5892] || r.stats: Add tests for JSON output || June 14, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5898 #5898] || v.distance: Update JSON format || June 16, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5900 #5900] || r.stats: fix uninitialised window value || June 17, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5906 #5906] || g.list: Add test file || June 17, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5921 #5921] || g.list: Add JSON support || June 20, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5929 #5929] || g.region: Update JSON format || June 21, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5946 #5946] || v.to.db: Update JSON format || June 23, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5962 #5962] || r.profile: Update JSON format || June 25, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5966 #5966] || r.univar: Add shell and CSV format || June 25, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5990 #5990] || r.regression.line: Add test file || June 30, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5993 #5993] || r.regression.line: Add JSON support || June 30, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6002 #6002] || r.stats.quantile: Add test file || July 1, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6007 #6007] || r.stats.quantile: Add JSON support || July 1, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6027 #6027] || r.volume: Add test file || July 4, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6036 #6036] || r.volume: Add JSON support || July 6, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6042 #6042] || db.columns: Add JSON support || July 7, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6051 #6051] || m.measure: Add test file || July 10, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6052 #6052] || db.connect: Add test file || July 10, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6053 #6053] || m.measure: Add JSON support || July 11, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6059 #6059] || db.connect: Add JSON support || July 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6066 #6066] || r.regression.multi: Add test file || July 15, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6067 #6067] || v.db.connect: Add test file || July 15, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6075 #6075] || r.regression.multi: Add JSON support || July 18, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6077 #6077] || v.db.connect: Add JSON support || July 19, 2025  || Open&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6091 #6091] || g.findfile: Add JSON support || July 21, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6098 #6098] || r3.info: Add test file || July 22, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6103 #6103] || r3.info: Add JSON support || July 23, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6109 #6109] || v.what.rast: Add test file || July 24, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6132 #6132] || v.category: Use CSV format instead of shell format || July 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6133 #6133] || r.stats: add CSV support || July 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6134 #6134] || r.volume: add csv column headers || July 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6140 #6140] || v.what.rast: Add JSON support || July 29, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6145 #6145] || r.profile: Add CSV support || July 30, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6150 #6150] || r.distance: Update existing test cases || August 1, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6204 #6204] || r.distance: Add JSON and CSV support || August 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6205 #6205] || v.class: Add more test cases and fix out-of-bounds bug || August 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6210 #6210] || v.class: Add JSON and CSV support || August 15, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6252 #6252] || v.what: Update JSON output format || August 23, 2025  || Open&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{GSoC}}&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28644</id>
		<title>GRASS GSoC 2025 Add JSON output to different tools in C</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28644"/>
		<updated>2025-08-23T09:56:34Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: /* Reports */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Nishant Bansal&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo - Open Source Geospatial Foundation]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/NishantBansal2003/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''GSoC proposal''' || [https://docs.google.com/document/d/1ZPQ9RXU7b_RUDmBmAMeK7ZjFAV1WC7Urd1Zlz678jyw/edit?tab=t.0#heading=h.z6ne0og04bp5 View Proposal]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Abstract =&lt;br /&gt;
Currently, most GRASS tools produce data in plain text by default. This means that users who want to process the output in Python need to create custom parsing code. To make this easier, several modules could be improved by oﬀering JSON as an alternative output format. Recently, the Parson library was added to the GRASS codebase to support JSON output in addition to plain text. Building on the advancements made during the last GSoC, my project aims to expand JSON output capabilities to more tools using the Parson library. I will also work on making the JSON structure introduced in the previous GSoC more useful and consistent. Additionally, I plan to add support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
&lt;br /&gt;
# Working with mentors to finalize the structure of the JSON output.&lt;br /&gt;
# Adding an option to choose the output format (plain text or JSON) for each updated tool.&lt;br /&gt;
# Make the JSON structure introduced during the last GSoC more useful and consistent across tools.&lt;br /&gt;
# Developing Python test cases to ensure that the JSON output works correctly and to avoid future issues.&lt;br /&gt;
# Providing basic documentation and example JSON outputs for each modified tool.&lt;br /&gt;
# Adding support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
# Develop simple examples demonstrating how to use JSON output in a data science workflow, such as reading JSON data into pandas or python.&lt;br /&gt;
&lt;br /&gt;
= Timeline =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Period !! Timeline  !! Tasks   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period &lt;br /&gt;
||&lt;br /&gt;
May 8 - June 1  &lt;br /&gt;
|| &lt;br /&gt;
# Reviewed the work done during the last GSoC to stabilize the JSON output.&lt;br /&gt;
# Discussed the priority tools for adding JSON support.&lt;br /&gt;
# Read GRASS documentation to add Python and JSON examples to the documentation.&lt;br /&gt;
|| &lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;13&amp;quot; | Official Coding Period &lt;br /&gt;
|-&lt;br /&gt;
| '''Week 1''' (June 2 - June 8) || &lt;br /&gt;
# Add JSON support for g.mapset [https://github.com/OSGeo/grass/pull/5810 #5810]&lt;br /&gt;
# Fix uninitialized zone_value in r.univar [https://github.com/OSGeo/grass/pull/5821 #5821]&lt;br /&gt;
# Add JSON support for r.what.color [https://github.com/OSGeo/grass/pull/5822 #5822]&lt;br /&gt;
# Update test file in r.info [https://github.com/OSGeo/grass/pull/5842 #5842]&lt;br /&gt;
# Improve interface for r.info [https://github.com/OSGeo/grass/pull/5859 #5859]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 2''' (June 9 - June 15) ||&lt;br /&gt;
# Add JSON support for g.version [https://github.com/OSGeo/grass/pull/5863 #5863]&lt;br /&gt;
# Add JSON support for i.group [https://github.com/OSGeo/grass/pull/5870 #5870]&lt;br /&gt;
# Add test file in r.stats [https://github.com/OSGeo/grass/pull/5879 #5879]&lt;br /&gt;
# Add tests for JSON output in r.stats [https://github.com/OSGeo/grass/pull/5892 #5892]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 3''' (June 16 - June 22) ||&lt;br /&gt;
# Update the JSON output schema of v.distance [https://github.com/OSGeo/grass/pull/5898 #5898]&lt;br /&gt;
# Fix uninitialized window variable in r.stats [https://github.com/OSGeo/grass/pull/5900 #5900]&lt;br /&gt;
# Add test file in g.list [https://github.com/OSGeo/grass/pull/5906 #5906]&lt;br /&gt;
# Add JSON support for g.list [https://github.com/OSGeo/grass/pull/5921 #5921]&lt;br /&gt;
# Update the JSON output schema of g.region [https://github.com/OSGeo/grass/pull/5929 #5929]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 4''' (June 23 - June 29) ||&lt;br /&gt;
# Update the JSON output schema of v.to.db [https://github.com/OSGeo/grass/pull/5946 #5946]&lt;br /&gt;
# Update the JSON output schema of r.profile [https://github.com/OSGeo/grass/pull/5962 #5962]&lt;br /&gt;
# Add SHELL and CSV output support for r.univar [https://github.com/OSGeo/grass/pull/5966 #5966]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 5''' (June 30 - July 6) ||&lt;br /&gt;
# Add test file in r.regression.line [https://github.com/OSGeo/grass/pull/5990 #5990]&lt;br /&gt;
# Add JSON support for r.regression.line [https://github.com/OSGeo/grass/pull/5993 #5993]&lt;br /&gt;
# Add test file in r.stats.quantile [https://github.com/OSGeo/grass/pull/6002 #6002]&lt;br /&gt;
# Add JSON support for r.stats.quantile [https://github.com/OSGeo/grass/pull/6007 #6007]&lt;br /&gt;
# Add test file in r.volume [https://github.com/OSGeo/grass/pull/6027 #6027]&lt;br /&gt;
# Add JSON support for r.volume [https://github.com/OSGeo/grass/pull/6036 #6036]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 6''' (July 7 - July 13) ||&lt;br /&gt;
# Add JSON support for db.columns [https://github.com/OSGeo/grass/pull/6042 #6042]&lt;br /&gt;
# Add test file in m.measure [https://github.com/OSGeo/grass/pull/6051 #6051]&lt;br /&gt;
# Add test file in db.connect [https://github.com/OSGeo/grass/pull/6052 #6052]&lt;br /&gt;
# Add JSON support for m.measure [https://github.com/OSGeo/grass/pull/6053 #6053]&lt;br /&gt;
# Add JSON support for db.connect [https://github.com/OSGeo/grass/pull/6059 #6059]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 7''' (July 14 - July 20) ||&lt;br /&gt;
# Add test file in r.regression.multi [https://github.com/OSGeo/grass/pull/6066 #6066]&lt;br /&gt;
# Add test file in v.db.connect [https://github.com/OSGeo/grass/pull/6067 #6067]&lt;br /&gt;
# Add JSON support for r.regression.multi [https://github.com/OSGeo/grass/pull/6075 #6075]&lt;br /&gt;
# Add JSON support for v.db.connect [https://github.com/OSGeo/grass/pull/6077 #6077]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 8''' (July 21 - July 27) ||&lt;br /&gt;
# Add JSON support for g.findfile [https://github.com/OSGeo/grass/pull/6091 #6091]&lt;br /&gt;
# Add test file in r3.info [https://github.com/OSGeo/grass/pull/6098 #6098]&lt;br /&gt;
# Add JSON support for r3.info [https://github.com/OSGeo/grass/pull/6103 #6103]&lt;br /&gt;
# Add test file in v.what.rast [https://github.com/OSGeo/grass/pull/6109 #6109]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 9''' (July 28 - August 3) ||&lt;br /&gt;
# Update format to CSV instead of shell in v.category [https://github.com/OSGeo/grass/pull/6132 #6132]&lt;br /&gt;
# Add CSV output support to r.stats [https://github.com/OSGeo/grass/pull/6133 #6133]&lt;br /&gt;
# Add CSV headers to r.volume [https://github.com/OSGeo/grass/pull/6134 #6134]&lt;br /&gt;
# Add JSON support for v.what.rast [https://github.com/OSGeo/grass/pull/6140 #6140]&lt;br /&gt;
# Add CSV output support to r.profile [https://github.com/OSGeo/grass/pull/6145 #6145]&lt;br /&gt;
# Update test cases in r.distance [https://github.com/OSGeo/grass/pull/6150 #6150]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 10''' (August 4 - August 10) ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 11''' (August 11 - August 17) ||&lt;br /&gt;
# Add JSON and CSV support for r.distance [https://github.com/OSGeo/grass/pull/6204 #6204]&lt;br /&gt;
# Add more test cases in v.class [https://github.com/OSGeo/grass/pull/6205 #6205]&lt;br /&gt;
# Add JSON and CSV support for v.class [https://github.com/OSGeo/grass/pull/6210 #6210]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 12''' (August 18 - August 24) ||  ||&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Evaluation Period &lt;br /&gt;
|-&lt;br /&gt;
| August 25 - September 1 ||  || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Reports =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* Introduced myself on the [https://discourse.osgeo.org/t/gsoc-2025-introduction-nishant-bansal/147005 OSGeo Discourse mailing list].&lt;br /&gt;
* Created both my [https://wiki.osgeo.org/wiki/User:Nishantbansal2003 personal Wiki page] and the [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C project Wiki page], adding all necessary project-related information.&lt;br /&gt;
* Read GRASS documentation to support the addition of Python and JSON examples.&lt;br /&gt;
* Worked on the following pull requests:&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5688 #5688]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5773 #5773]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5775 #5775]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5784 #5784]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5785 #5785]&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to the g.mapset and r.what.color modules.&lt;br /&gt;
* If time permits, I will begin improving the r.info interface: [https://github.com/OSGeo/grass/issues/5793 Issue #5793]&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
'''Project Discussions and Meetings'''&lt;br /&gt;
* '''14 May 2025''': Introductory meeting discussing JSON support and overall project milestones.&lt;br /&gt;
* '''21 May 2025''': Introduction with fellow developers. Discussed priority tools, adding Python/Pandas examples, and approaches for finalizing the JSON schema for each module.&lt;br /&gt;
&lt;br /&gt;
== Week-1 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.mapset''': Added JSON output support, now you can use -p and -l flags to get JSON-formatted results.&lt;br /&gt;
* '''r.univar''': Fixed a bug causing an uninitialized zone_value.&lt;br /&gt;
* '''r.what.color''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5822 #5822])&lt;br /&gt;
* '''r.info (regression tests)''': To maintain backward compatibility while updating its interface, I added strong regression tests.&lt;br /&gt;
* '''r.info (interface improvements)''': Began improving the module’s interface. (See PR [https://github.com/OSGeo/grass/pull/5859 #5859])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.version (see issue [https://github.com/OSGeo/grass/issues/5816 #5816]).&lt;br /&gt;
* Add JSON output support to i.group (see issue [https://github.com/OSGeo/grass/issues/5815 #5815]).&lt;br /&gt;
* If time permits, write tests for r.stats (see issue [https://github.com/OSGeo/grass/issues/5814 #5814]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-2 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.version''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5863 #5863])&lt;br /&gt;
* '''i.group''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5870 #5870])&lt;br /&gt;
* '''r.stats (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats''': Added tests for JSON output; this uncovered a bug, which was fixed alongside.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.distance (see issue [https://github.com/OSGeo/grass/issues/5846 #5846]).&lt;br /&gt;
* Add JSON output support to g.list (see issue [https://github.com/OSGeo/grass/issues/5848 #5848]).&lt;br /&gt;
* If time permits, fix the JSON output format of g.region (see issue [https://github.com/OSGeo/grass/issues/5828 #5828]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-3 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.distance''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5898 #5898])&lt;br /&gt;
* '''r.stats''': Fixed a bug causing an uninitialized &amp;lt;code&amp;gt;window&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
* '''g.list (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''g.list''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5921 #5921])&lt;br /&gt;
* '''g.region''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5929 #5929])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.to.db (see issue [https://github.com/OSGeo/grass/pull/5711 #5711]).&lt;br /&gt;
* Update JSON output format and documentation of r.profile (see issue [https://github.com/OSGeo/grass/pull/5834 #5834]).&lt;br /&gt;
* If time permits, add shell and csv output formats to r.univar (see issue [https://github.com/OSGeo/grass/pull/5824 #5824]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-4 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.to.db''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5946 #5946])&lt;br /&gt;
* '''r.profile''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5962 #5962])&lt;br /&gt;
* '''r.univar''': Implemented SHELL and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/5966 #5966])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.regression.line (see issue [https://github.com/OSGeo/grass/pull/5950 #5950]).&lt;br /&gt;
* Add JSON output support to r.stats.quantile (see issue [https://github.com/OSGeo/grass/pull/5951 #5951]).&lt;br /&gt;
* Add JSON output support to r.volume (see issue [https://github.com/OSGeo/grass/pull/5949 #5949]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-5 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.line (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.line''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5993 #5993])&lt;br /&gt;
* '''r.stats.quantile (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats.quantile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6007 #6007])&lt;br /&gt;
* '''r.volume (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.volume''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6036 #6036])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to m.measure (see issue [https://github.com/OSGeo/grass/pull/6006 #6006]).&lt;br /&gt;
* Add JSON output support to db.columns (see issue [https://github.com/OSGeo/grass/pull/6008 #6008]).&lt;br /&gt;
* Add JSON output support to db.connect (see issue [https://github.com/OSGeo/grass/pull/6009 #6009]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-6 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''db.columns''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6042 #6042])&lt;br /&gt;
* '''m.measure (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''m.measure''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6053 #6053])&lt;br /&gt;
* '''db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6059 #6059])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to v.db.connect (see issue [https://github.com/OSGeo/grass/pull/6014 #6014]).&lt;br /&gt;
* Add JSON output support to r.regression.multi (see issue [https://github.com/OSGeo/grass/pull/6010 #6010]).&lt;br /&gt;
* If time permits, add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* If time permits, add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-7 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.multi (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''v.db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.multi''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6075 #6075])&lt;br /&gt;
* '''v.db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6077 #6077])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* Add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
* If time permits, add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-8 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.findfile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6091 #6091])&lt;br /&gt;
* '''r3.info (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a flag-handling bug.&lt;br /&gt;
* '''r3.info''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6103 #6103])&lt;br /&gt;
* '''v.what.rast (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a sorting bug.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
* Update format to CSV instead of shell in v.category (see issue [https://github.com/OSGeo/grass/pull/6025 #6025]).&lt;br /&gt;
* Add CSV output support to r.stats (see issue [https://github.com/OSGeo/grass/issues/5835 #5835]).&lt;br /&gt;
* If time permits, add CSV output support to r.profile (see issue [https://github.com/OSGeo/grass/issues/5958 #5958]).&lt;br /&gt;
* If time permits, add CSV headers to r.volume (see issue [https://github.com/OSGeo/grass/issues/6049 #6049]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I don’t have any blockers this week. However, I’ll be a little busy with some personal work from August 3 to August 10, so I’ll try to complete next week’s tasks this week itself.&lt;br /&gt;
&lt;br /&gt;
== Week-9 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.category''': Updated format to CSV instead of shell. (See PR [https://github.com/OSGeo/grass/pull/6132 #6132])&lt;br /&gt;
* '''r.stats''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6133 #6133])&lt;br /&gt;
* '''r.volume''': Implemented CSV column headers support. (See PR [https://github.com/OSGeo/grass/pull/6134 #6134])&lt;br /&gt;
* '''v.what.rast''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6140 #6140])&lt;br /&gt;
* '''r.profile''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6145 #6145])&lt;br /&gt;
* '''r.distance (regression tests)''': Updated regression tests to ensure backward compatibility with new JSON support. (See PR [https://github.com/OSGeo/grass/pull/6150 #6150])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* I’ll be a bit busy with some personal work from August 3 to 10, so I completed next week’s tasks last week itself. I’ve already informed my mentors about my limited availability.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* Yes, I’ll be a bit busy with some personal work from August 3 to 10.&lt;br /&gt;
&lt;br /&gt;
== Week-10 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* This week I was busy with some personal work, so I did not complete any additional tasks. However, I had already finished this week’s tasks last week. This week, I mostly focused on handling reviews for those PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.distance (see issue [https://github.com/OSGeo/grass/issues/6135 #6135]).&lt;br /&gt;
* Add JSON output support to v.class (see issue [https://github.com/OSGeo/grass/issues/6136 #6136]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-11 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.distance''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6204 #6204])&lt;br /&gt;
* '''v.class''': Updated regression tests to ensure backward compatibility with new JSON support and fixed a out-of-bounds bug. (See PR [https://github.com/OSGeo/grass/pull/6205 #6205])&lt;br /&gt;
* '''v.class''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6210 #6210])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Discuss next week’s tasks with my mentors, if no issues are assigned, I’ll identify tools that currently lack JSON support and evaluate which ones are feasible to add it to.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-12 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.what''': Update JSON output format. (See PR [https://github.com/OSGeo/grass/pull/6252 #6252])&lt;br /&gt;
* Addressed review comments on my open PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
= Log of Pull Requests =&lt;br /&gt;
Below is a list of pull requests submitted to the GRASS repository during GSoC 2025:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pull Request !! Description  !! Date   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5688 #5688] || r.univar: Fix JSON structure || May 20, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5773 #5773] || r.what.color: Add test file || May 25, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5775 #5775] || g.mapset: Add test file || May 26, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5784 #5784] || r.info: Add Python example || May 28, 2025  || Closed&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5785 #5785] || g.region: Add Python example || May 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5810 #5810] || g.mapset: Add JSON support || June 2, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5821 #5821] || r.univar: Fix uninitialized zone_value || June 3, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5822 #5822] || r.what.color: Add JSON support || June 3, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5842 #5842] || r.info: Update test file || June 5, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5859 #5859] || r.info: Improve interface || June 7, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5863 #5863] || g.version: Add JSON support || June 9, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5870 #5870] || i.group: Add JSON support || June 10, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5879 #5879] || r.stats: Add test file || June 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5892 #5892] || r.stats: Add tests for JSON output || June 14, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5898 #5898] || v.distance: Update JSON format || June 16, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5900 #5900] || r.stats: fix uninitialised window value || June 17, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5906 #5906] || g.list: Add test file || June 17, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5921 #5921] || g.list: Add JSON support || June 20, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5929 #5929] || g.region: Update JSON format || June 21, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5946 #5946] || v.to.db: Update JSON format || June 23, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5962 #5962] || r.profile: Update JSON format || June 25, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5966 #5966] || r.univar: Add shell and CSV format || June 25, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5990 #5990] || r.regression.line: Add test file || June 30, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5993 #5993] || r.regression.line: Add JSON support || June 30, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6002 #6002] || r.stats.quantile: Add test file || July 1, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6007 #6007] || r.stats.quantile: Add JSON support || July 1, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6027 #6027] || r.volume: Add test file || July 4, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6036 #6036] || r.volume: Add JSON support || July 6, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6042 #6042] || db.columns: Add JSON support || July 7, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6051 #6051] || m.measure: Add test file || July 10, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6052 #6052] || db.connect: Add test file || July 10, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6053 #6053] || m.measure: Add JSON support || July 11, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6059 #6059] || db.connect: Add JSON support || July 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6066 #6066] || r.regression.multi: Add test file || July 15, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6067 #6067] || v.db.connect: Add test file || July 15, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6075 #6075] || r.regression.multi: Add JSON support || July 18, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6077 #6077] || v.db.connect: Add JSON support || July 19, 2025  || Open&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6091 #6091] || g.findfile: Add JSON support || July 21, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6098 #6098] || r3.info: Add test file || July 22, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6103 #6103] || r3.info: Add JSON support || July 23, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6109 #6109] || v.what.rast: Add test file || July 24, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6132 #6132] || v.category: Use CSV format instead of shell format || July 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6133 #6133] || r.stats: add CSV support || July 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6134 #6134] || r.volume: add csv column headers || July 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6140 #6140] || v.what.rast: Add JSON support || July 29, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6145 #6145] || r.profile: Add CSV support || July 30, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6150 #6150] || r.distance: Update existing test cases || August 1, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6204 #6204] || r.distance: Add JSON and CSV support || August 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6205 #6205] || v.class: Add more test cases and fix out-of-bounds bug || August 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6210 #6210] || v.class: Add JSON and CSV support || August 15, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6252 #6252] || v.what: Update JSON output format || August 23, 2025  || Open&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{GSoC}}&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28643</id>
		<title>GRASS GSoC 2025 Add JSON output to different tools in C</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C&amp;diff=28643"/>
		<updated>2025-08-23T09:52:22Z</updated>

		<summary type="html">&lt;p&gt;Nishantbansal2003: /* Log of Pull Requests */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Nishant Bansal&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://www.osgeo.org/ ​OSGeo - Open Source Geospatial Foundation]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Anna Petrasova, Corey White, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/NishantBansal2003/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''GSoC proposal''' || [https://docs.google.com/document/d/1ZPQ9RXU7b_RUDmBmAMeK7ZjFAV1WC7Urd1Zlz678jyw/edit?tab=t.0#heading=h.z6ne0og04bp5 View Proposal]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Abstract =&lt;br /&gt;
Currently, most GRASS tools produce data in plain text by default. This means that users who want to process the output in Python need to create custom parsing code. To make this easier, several modules could be improved by oﬀering JSON as an alternative output format. Recently, the Parson library was added to the GRASS codebase to support JSON output in addition to plain text. Building on the advancements made during the last GSoC, my project aims to expand JSON output capabilities to more tools using the Parson library. I will also work on making the JSON structure introduced in the previous GSoC more useful and consistent. Additionally, I plan to add support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
&lt;br /&gt;
# Working with mentors to finalize the structure of the JSON output.&lt;br /&gt;
# Adding an option to choose the output format (plain text or JSON) for each updated tool.&lt;br /&gt;
# Make the JSON structure introduced during the last GSoC more useful and consistent across tools.&lt;br /&gt;
# Developing Python test cases to ensure that the JSON output works correctly and to avoid future issues.&lt;br /&gt;
# Providing basic documentation and example JSON outputs for each modified tool.&lt;br /&gt;
# Adding support for SHELL and CSV output formats to the relevant tools where appropriate.&lt;br /&gt;
# Develop simple examples demonstrating how to use JSON output in a data science workflow, such as reading JSON data into pandas or python.&lt;br /&gt;
&lt;br /&gt;
= Timeline =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Period !! Timeline  !! Tasks   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period &lt;br /&gt;
||&lt;br /&gt;
May 8 - June 1  &lt;br /&gt;
|| &lt;br /&gt;
# Reviewed the work done during the last GSoC to stabilize the JSON output.&lt;br /&gt;
# Discussed the priority tools for adding JSON support.&lt;br /&gt;
# Read GRASS documentation to add Python and JSON examples to the documentation.&lt;br /&gt;
|| &lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;13&amp;quot; | Official Coding Period &lt;br /&gt;
|-&lt;br /&gt;
| '''Week 1''' (June 2 - June 8) || &lt;br /&gt;
# Add JSON support for g.mapset [https://github.com/OSGeo/grass/pull/5810 #5810]&lt;br /&gt;
# Fix uninitialized zone_value in r.univar [https://github.com/OSGeo/grass/pull/5821 #5821]&lt;br /&gt;
# Add JSON support for r.what.color [https://github.com/OSGeo/grass/pull/5822 #5822]&lt;br /&gt;
# Update test file in r.info [https://github.com/OSGeo/grass/pull/5842 #5842]&lt;br /&gt;
# Improve interface for r.info [https://github.com/OSGeo/grass/pull/5859 #5859]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 2''' (June 9 - June 15) ||&lt;br /&gt;
# Add JSON support for g.version [https://github.com/OSGeo/grass/pull/5863 #5863]&lt;br /&gt;
# Add JSON support for i.group [https://github.com/OSGeo/grass/pull/5870 #5870]&lt;br /&gt;
# Add test file in r.stats [https://github.com/OSGeo/grass/pull/5879 #5879]&lt;br /&gt;
# Add tests for JSON output in r.stats [https://github.com/OSGeo/grass/pull/5892 #5892]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 3''' (June 16 - June 22) ||&lt;br /&gt;
# Update the JSON output schema of v.distance [https://github.com/OSGeo/grass/pull/5898 #5898]&lt;br /&gt;
# Fix uninitialized window variable in r.stats [https://github.com/OSGeo/grass/pull/5900 #5900]&lt;br /&gt;
# Add test file in g.list [https://github.com/OSGeo/grass/pull/5906 #5906]&lt;br /&gt;
# Add JSON support for g.list [https://github.com/OSGeo/grass/pull/5921 #5921]&lt;br /&gt;
# Update the JSON output schema of g.region [https://github.com/OSGeo/grass/pull/5929 #5929]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 4''' (June 23 - June 29) ||&lt;br /&gt;
# Update the JSON output schema of v.to.db [https://github.com/OSGeo/grass/pull/5946 #5946]&lt;br /&gt;
# Update the JSON output schema of r.profile [https://github.com/OSGeo/grass/pull/5962 #5962]&lt;br /&gt;
# Add SHELL and CSV output support for r.univar [https://github.com/OSGeo/grass/pull/5966 #5966]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 5''' (June 30 - July 6) ||&lt;br /&gt;
# Add test file in r.regression.line [https://github.com/OSGeo/grass/pull/5990 #5990]&lt;br /&gt;
# Add JSON support for r.regression.line [https://github.com/OSGeo/grass/pull/5993 #5993]&lt;br /&gt;
# Add test file in r.stats.quantile [https://github.com/OSGeo/grass/pull/6002 #6002]&lt;br /&gt;
# Add JSON support for r.stats.quantile [https://github.com/OSGeo/grass/pull/6007 #6007]&lt;br /&gt;
# Add test file in r.volume [https://github.com/OSGeo/grass/pull/6027 #6027]&lt;br /&gt;
# Add JSON support for r.volume [https://github.com/OSGeo/grass/pull/6036 #6036]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 6''' (July 7 - July 13) ||&lt;br /&gt;
# Add JSON support for db.columns [https://github.com/OSGeo/grass/pull/6042 #6042]&lt;br /&gt;
# Add test file in m.measure [https://github.com/OSGeo/grass/pull/6051 #6051]&lt;br /&gt;
# Add test file in db.connect [https://github.com/OSGeo/grass/pull/6052 #6052]&lt;br /&gt;
# Add JSON support for m.measure [https://github.com/OSGeo/grass/pull/6053 #6053]&lt;br /&gt;
# Add JSON support for db.connect [https://github.com/OSGeo/grass/pull/6059 #6059]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 7''' (July 14 - July 20) ||&lt;br /&gt;
# Add test file in r.regression.multi [https://github.com/OSGeo/grass/pull/6066 #6066]&lt;br /&gt;
# Add test file in v.db.connect [https://github.com/OSGeo/grass/pull/6067 #6067]&lt;br /&gt;
# Add JSON support for r.regression.multi [https://github.com/OSGeo/grass/pull/6075 #6075]&lt;br /&gt;
# Add JSON support for v.db.connect [https://github.com/OSGeo/grass/pull/6077 #6077]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 8''' (July 21 - July 27) ||&lt;br /&gt;
# Add JSON support for g.findfile [https://github.com/OSGeo/grass/pull/6091 #6091]&lt;br /&gt;
# Add test file in r3.info [https://github.com/OSGeo/grass/pull/6098 #6098]&lt;br /&gt;
# Add JSON support for r3.info [https://github.com/OSGeo/grass/pull/6103 #6103]&lt;br /&gt;
# Add test file in v.what.rast [https://github.com/OSGeo/grass/pull/6109 #6109]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 9''' (July 28 - August 3) ||&lt;br /&gt;
# Update format to CSV instead of shell in v.category [https://github.com/OSGeo/grass/pull/6132 #6132]&lt;br /&gt;
# Add CSV output support to r.stats [https://github.com/OSGeo/grass/pull/6133 #6133]&lt;br /&gt;
# Add CSV headers to r.volume [https://github.com/OSGeo/grass/pull/6134 #6134]&lt;br /&gt;
# Add JSON support for v.what.rast [https://github.com/OSGeo/grass/pull/6140 #6140]&lt;br /&gt;
# Add CSV output support to r.profile [https://github.com/OSGeo/grass/pull/6145 #6145]&lt;br /&gt;
# Update test cases in r.distance [https://github.com/OSGeo/grass/pull/6150 #6150]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 10''' (August 4 - August 10) ||&lt;br /&gt;
# Address review comments on my open PRs.&lt;br /&gt;
||&lt;br /&gt;
OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 11''' (August 11 - August 17) ||&lt;br /&gt;
# Add JSON and CSV support for r.distance [https://github.com/OSGeo/grass/pull/6204 #6204]&lt;br /&gt;
# Add more test cases in v.class [https://github.com/OSGeo/grass/pull/6205 #6205]&lt;br /&gt;
# Add JSON and CSV support for v.class [https://github.com/OSGeo/grass/pull/6210 #6210]&lt;br /&gt;
||&lt;br /&gt;
OK&amp;lt;br&amp;gt;OK&amp;lt;br&amp;gt;OK&lt;br /&gt;
|-&lt;br /&gt;
| '''Week 12''' (August 18 - August 24) ||  ||&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Evaluation Period &lt;br /&gt;
|-&lt;br /&gt;
| August 25 - September 1 ||  || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Reports =&lt;br /&gt;
== Community Bonding Period ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* Introduced myself on the [https://discourse.osgeo.org/t/gsoc-2025-introduction-nishant-bansal/147005 OSGeo Discourse mailing list].&lt;br /&gt;
* Created both my [https://wiki.osgeo.org/wiki/User:Nishantbansal2003 personal Wiki page] and the [https://grasswiki.osgeo.org/wiki/GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C project Wiki page], adding all necessary project-related information.&lt;br /&gt;
* Read GRASS documentation to support the addition of Python and JSON examples.&lt;br /&gt;
* Worked on the following pull requests:&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5688 #5688]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5773 #5773]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5775 #5775]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5784 #5784]&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5785 #5785]&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to the g.mapset and r.what.color modules.&lt;br /&gt;
* If time permits, I will begin improving the r.info interface: [https://github.com/OSGeo/grass/issues/5793 Issue #5793]&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
'''Project Discussions and Meetings'''&lt;br /&gt;
* '''14 May 2025''': Introductory meeting discussing JSON support and overall project milestones.&lt;br /&gt;
* '''21 May 2025''': Introduction with fellow developers. Discussed priority tools, adding Python/Pandas examples, and approaches for finalizing the JSON schema for each module.&lt;br /&gt;
&lt;br /&gt;
== Week-1 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.mapset''': Added JSON output support, now you can use -p and -l flags to get JSON-formatted results.&lt;br /&gt;
* '''r.univar''': Fixed a bug causing an uninitialized zone_value.&lt;br /&gt;
* '''r.what.color''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5822 #5822])&lt;br /&gt;
* '''r.info (regression tests)''': To maintain backward compatibility while updating its interface, I added strong regression tests.&lt;br /&gt;
* '''r.info (interface improvements)''': Began improving the module’s interface. (See PR [https://github.com/OSGeo/grass/pull/5859 #5859])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.version (see issue [https://github.com/OSGeo/grass/issues/5816 #5816]).&lt;br /&gt;
* Add JSON output support to i.group (see issue [https://github.com/OSGeo/grass/issues/5815 #5815]).&lt;br /&gt;
* If time permits, write tests for r.stats (see issue [https://github.com/OSGeo/grass/issues/5814 #5814]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-2 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.version''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5863 #5863])&lt;br /&gt;
* '''i.group''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5870 #5870])&lt;br /&gt;
* '''r.stats (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats''': Added tests for JSON output; this uncovered a bug, which was fixed alongside.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.distance (see issue [https://github.com/OSGeo/grass/issues/5846 #5846]).&lt;br /&gt;
* Add JSON output support to g.list (see issue [https://github.com/OSGeo/grass/issues/5848 #5848]).&lt;br /&gt;
* If time permits, fix the JSON output format of g.region (see issue [https://github.com/OSGeo/grass/issues/5828 #5828]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-3 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.distance''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5898 #5898])&lt;br /&gt;
* '''r.stats''': Fixed a bug causing an uninitialized &amp;lt;code&amp;gt;window&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
* '''g.list (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''g.list''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5921 #5921])&lt;br /&gt;
* '''g.region''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5929 #5929])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Update JSON output format of v.to.db (see issue [https://github.com/OSGeo/grass/pull/5711 #5711]).&lt;br /&gt;
* Update JSON output format and documentation of r.profile (see issue [https://github.com/OSGeo/grass/pull/5834 #5834]).&lt;br /&gt;
* If time permits, add shell and csv output formats to r.univar (see issue [https://github.com/OSGeo/grass/pull/5824 #5824]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-4 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.to.db''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5946 #5946])&lt;br /&gt;
* '''r.profile''': Updated the JSON output schema. (See PR [https://github.com/OSGeo/grass/pull/5962 #5962])&lt;br /&gt;
* '''r.univar''': Implemented SHELL and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/5966 #5966])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.regression.line (see issue [https://github.com/OSGeo/grass/pull/5950 #5950]).&lt;br /&gt;
* Add JSON output support to r.stats.quantile (see issue [https://github.com/OSGeo/grass/pull/5951 #5951]).&lt;br /&gt;
* Add JSON output support to r.volume (see issue [https://github.com/OSGeo/grass/pull/5949 #5949]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-5 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.line (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.line''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/5993 #5993])&lt;br /&gt;
* '''r.stats.quantile (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.stats.quantile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6007 #6007])&lt;br /&gt;
* '''r.volume (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.volume''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6036 #6036])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to m.measure (see issue [https://github.com/OSGeo/grass/pull/6006 #6006]).&lt;br /&gt;
* Add JSON output support to db.columns (see issue [https://github.com/OSGeo/grass/pull/6008 #6008]).&lt;br /&gt;
* Add JSON output support to db.connect (see issue [https://github.com/OSGeo/grass/pull/6009 #6009]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-6 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''db.columns''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6042 #6042])&lt;br /&gt;
* '''m.measure (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''m.measure''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6053 #6053])&lt;br /&gt;
* '''db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6059 #6059])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to v.db.connect (see issue [https://github.com/OSGeo/grass/pull/6014 #6014]).&lt;br /&gt;
* Add JSON output support to r.regression.multi (see issue [https://github.com/OSGeo/grass/pull/6010 #6010]).&lt;br /&gt;
* If time permits, add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* If time permits, add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-7 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.regression.multi (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''v.db.connect (regression tests)''': To maintain backward compatibility while adding JSON format, I added strong regression tests.&lt;br /&gt;
* '''r.regression.multi''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6075 #6075])&lt;br /&gt;
* '''v.db.connect''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6077 #6077])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to g.findfile (see issue [https://github.com/OSGeo/grass/pull/6005 #6005]).&lt;br /&gt;
* Add JSON output support to r3.info (see issue [https://github.com/OSGeo/grass/pull/5995 #5995]).&lt;br /&gt;
* If time permits, add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-8 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''g.findfile''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6091 #6091])&lt;br /&gt;
* '''r3.info (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a flag-handling bug.&lt;br /&gt;
* '''r3.info''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6103 #6103])&lt;br /&gt;
* '''v.what.rast (regression tests)''': Added regression tests to ensure backward compatibility with new JSON support and fixed a sorting bug.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Add JSON output support to v.what.rast (see issue [https://github.com/OSGeo/grass/pull/6024 #6024]).&lt;br /&gt;
* Update format to CSV instead of shell in v.category (see issue [https://github.com/OSGeo/grass/pull/6025 #6025]).&lt;br /&gt;
* Add CSV output support to r.stats (see issue [https://github.com/OSGeo/grass/issues/5835 #5835]).&lt;br /&gt;
* If time permits, add CSV output support to r.profile (see issue [https://github.com/OSGeo/grass/issues/5958 #5958]).&lt;br /&gt;
* If time permits, add CSV headers to r.volume (see issue [https://github.com/OSGeo/grass/issues/6049 #6049]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I don’t have any blockers this week. However, I’ll be a little busy with some personal work from August 3 to August 10, so I’ll try to complete next week’s tasks this week itself.&lt;br /&gt;
&lt;br /&gt;
== Week-9 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''v.category''': Updated format to CSV instead of shell. (See PR [https://github.com/OSGeo/grass/pull/6132 #6132])&lt;br /&gt;
* '''r.stats''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6133 #6133])&lt;br /&gt;
* '''r.volume''': Implemented CSV column headers support. (See PR [https://github.com/OSGeo/grass/pull/6134 #6134])&lt;br /&gt;
* '''v.what.rast''': Implemented JSON output support. (See PR [https://github.com/OSGeo/grass/pull/6140 #6140])&lt;br /&gt;
* '''r.profile''': Implemented CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6145 #6145])&lt;br /&gt;
* '''r.distance (regression tests)''': Updated regression tests to ensure backward compatibility with new JSON support. (See PR [https://github.com/OSGeo/grass/pull/6150 #6150])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* I’ll be a bit busy with some personal work from August 3 to 10, so I completed next week’s tasks last week itself. I’ve already informed my mentors about my limited availability.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* Yes, I’ll be a bit busy with some personal work from August 3 to 10.&lt;br /&gt;
&lt;br /&gt;
== Week-10 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* This week I was busy with some personal work, so I did not complete any additional tasks. However, I had already finished this week’s tasks last week. This week, I mostly focused on handling reviews for those PRs.&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Add JSON output support to r.distance (see issue [https://github.com/OSGeo/grass/issues/6135 #6135]).&lt;br /&gt;
* Add JSON output support to v.class (see issue [https://github.com/OSGeo/grass/issues/6136 #6136]).&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
== Week-11 ==&lt;br /&gt;
&lt;br /&gt;
'''What did I get done this week?'''&lt;br /&gt;
* '''r.distance''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6204 #6204])&lt;br /&gt;
* '''v.class''': Updated regression tests to ensure backward compatibility with new JSON support and fixed a out-of-bounds bug. (See PR [https://github.com/OSGeo/grass/pull/6205 #6205])&lt;br /&gt;
* '''v.class''': Implemented JSON and CSV output support. (See PR [https://github.com/OSGeo/grass/pull/6210 #6210])&lt;br /&gt;
&lt;br /&gt;
'''What do I plan on doing next week?'''&lt;br /&gt;
* Address review comments on my open PRs.&lt;br /&gt;
* Discuss next week’s tasks with my mentors, if no issues are assigned, I’ll identify tools that currently lack JSON support and evaluate which ones are feasible to add it to.&lt;br /&gt;
* Write the final GSoC report summarizing the work completed, changes merged, and next steps.&lt;br /&gt;
&lt;br /&gt;
'''Am I blocked on anything?'''&lt;br /&gt;
* No, I am not currently blocked on anything.&lt;br /&gt;
&lt;br /&gt;
= Log of Pull Requests =&lt;br /&gt;
Below is a list of pull requests submitted to the GRASS repository during GSoC 2025:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pull Request !! Description  !! Date   !! Status &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5688 #5688] || r.univar: Fix JSON structure || May 20, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5773 #5773] || r.what.color: Add test file || May 25, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5775 #5775] || g.mapset: Add test file || May 26, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5784 #5784] || r.info: Add Python example || May 28, 2025  || Closed&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5785 #5785] || g.region: Add Python example || May 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5810 #5810] || g.mapset: Add JSON support || June 2, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5821 #5821] || r.univar: Fix uninitialized zone_value || June 3, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5822 #5822] || r.what.color: Add JSON support || June 3, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5842 #5842] || r.info: Update test file || June 5, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5859 #5859] || r.info: Improve interface || June 7, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5863 #5863] || g.version: Add JSON support || June 9, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5870 #5870] || i.group: Add JSON support || June 10, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5879 #5879] || r.stats: Add test file || June 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5892 #5892] || r.stats: Add tests for JSON output || June 14, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5898 #5898] || v.distance: Update JSON format || June 16, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5900 #5900] || r.stats: fix uninitialised window value || June 17, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5906 #5906] || g.list: Add test file || June 17, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5921 #5921] || g.list: Add JSON support || June 20, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5929 #5929] || g.region: Update JSON format || June 21, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5946 #5946] || v.to.db: Update JSON format || June 23, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5962 #5962] || r.profile: Update JSON format || June 25, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5966 #5966] || r.univar: Add shell and CSV format || June 25, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5990 #5990] || r.regression.line: Add test file || June 30, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/5993 #5993] || r.regression.line: Add JSON support || June 30, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6002 #6002] || r.stats.quantile: Add test file || July 1, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6007 #6007] || r.stats.quantile: Add JSON support || July 1, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6027 #6027] || r.volume: Add test file || July 4, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6036 #6036] || r.volume: Add JSON support || July 6, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6042 #6042] || db.columns: Add JSON support || July 7, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6051 #6051] || m.measure: Add test file || July 10, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6052 #6052] || db.connect: Add test file || July 10, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6053 #6053] || m.measure: Add JSON support || July 11, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6059 #6059] || db.connect: Add JSON support || July 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6066 #6066] || r.regression.multi: Add test file || July 15, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6067 #6067] || v.db.connect: Add test file || July 15, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6075 #6075] || r.regression.multi: Add JSON support || July 18, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6077 #6077] || v.db.connect: Add JSON support || July 19, 2025  || Open&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6091 #6091] || g.findfile: Add JSON support || July 21, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6098 #6098] || r3.info: Add test file || July 22, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6103 #6103] || r3.info: Add JSON support || July 23, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6109 #6109] || v.what.rast: Add test file || July 24, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6132 #6132] || v.category: Use CSV format instead of shell format || July 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6133 #6133] || r.stats: add CSV support || July 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6134 #6134] || r.volume: add csv column headers || July 28, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6140 #6140] || v.what.rast: Add JSON support || July 29, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6145 #6145] || r.profile: Add CSV support || July 30, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6150 #6150] || r.distance: Update existing test cases || August 1, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6204 #6204] || r.distance: Add JSON and CSV support || August 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6205 #6205] || v.class: Add more test cases and fix out-of-bounds bug || August 12, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6210 #6210] || v.class: Add JSON and CSV support || August 15, 2025  || Merged&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/OSGeo/grass/pull/6252 #6252] || v.what: Update JSON output format || August 23, 2025  || Open&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{GSoC}}&lt;/div&gt;</summary>
		<author><name>Nishantbansal2003</name></author>
	</entry>
</feed>