Сделал на коленке конкретно под ваш пример. Но, думаю, понятно в какую сторону копать
composer req seld/jsonlint
#!/usr/bin/env php
<?php
use Seld\JsonLint\JsonParser;
use Seld\JsonLint\ParsingException;
require_once __DIR__ . '/../vendor/autoload.php';
$parser = new JsonParser();
$data = file_get_contents(__DIR__ . '/../test.json');
$tries = 0;
do {
$repeat = false;
try {
$parser->parse($data);
} catch (ParsingException $e) {
$details = $e->getDetails();
$start = $details['loc']['first_column'];
$end = mb_strpos($data, ',', $start, 'utf8') - 1;
$problemString = mb_substr($data, $start, $end - $start, 'utf8');
$data = str_replace($problemString, addslashes($problemString), $data);
$repeat = true;
$tries++;
}
} while ($repeat);
echo $data;