MySQL 8.0 table with JSON column that uses JSON "merge" operations has 500k rows but analyze table shows 7MM
This has more to do with InnoDB

As stated in the documentation to table status


  The number of rows. Some storage engines, such as MyISAM, store the exact count. For other storage engines, such as InnoDB, this value is an approximation, and may vary from the actual value by as much as 40% to 50%. In such cases, use SELECT COUNT(*) to obtain an accurate count. 


So COUNT(*) gives you the exact number.