Convert Invalid JSON into Valid JSON

Convert invalid json into valid json

All keys (preOpen, preClose, ...) have to be strings, so they need double-quotes around.

{
"preOpen": "900",
"preClose": "908",
...
}

=== UPDATE ===

If you have an invalid Json-String you can convert it with following script:

$sInvalidJson = '{
preOpen: "900",
preClose: "908"
}';
$sValidJson = preg_replace("/(\n[\t ]*)([^\t ]+):/", "$1\"$2\":", $sInvalidJson);

Also see this example.

(This script only works with the invalid JSON described above, otherwise the pattern has to be changed.)

=== UPDATE ===

$sInvalidJson = '{preOpen:"900",preClose:"908",mktOpen:"915",mktClose:"1530",corrOpen:"1540",corrClose:"1600",mktStatusCode:"3",status:"MARKET OPEN",time:"Jan 11, 2012 14:25:15",data:[{name:"S&P CNX NIFTY Pre Open",lastPrice:"4,863.15",change:"13.60",pChange:"0.28",imgFileName:"S&P_CNX_NIFTY_Pre_Open_open.png"},{name:"S&P CNX NIFTY",lastPrice:"4,847.85",change:"-1.70",pChange:"-0.04",imgFileName:"S&P_CNX_NIFTY_open.png"},{name:"CNX NIFTY JUNIOR",lastPrice:"8,917.00",change:"68.85",pChange:"0.78",imgFileName:"CNX_NIFTY_JUNIOR_open.png"},{name:"BANK NIFTY",lastPrice:"8,768.75",change:"33.70",pChange:"0.39",imgFileName:"BANK_NIFTY_open.png"},{name:"INDIA VIX",lastPrice:"24.61",change:"0.61",pChange:"2.54",imgFileName:"INDIA_VIX_open.png"},{name:"CNX 100",lastPrice:"4,707.85",change:"3.65",pChange:"0.08",imgFileName:"CNX_100_open.png"},{name:"S&P CNX DEFTY",lastPrice:"3,253.50",change:"30.20",pChange:"0.94",imgFileName:"S&P_CNX_DEFTY_open.png"},{name:"S&P CNX 500",lastPrice:"3,795.40",change:"10.05",pChange:"0.27",imgFileName:"S&P_CNX_500_open.png"},{name:"CNX MIDCAP",lastPrice:"6,524.90",change:"57.35",pChange:"0.89",imgFileName:"CNX_MIDCAP_open.png"},{name:"NIFTY MIDCAP 50",lastPrice:"1,926.55",change:"10.65",pChange:"0.56",imgFileName:"NIFTY_MIDCAP_50_open.png"},{name:"CNX INFRA",lastPrice:"2,262.05",change:"-3.05",pChange:"-0.13",imgFileName:"CNX_INFRA_open.png"},{name:"CNX REALTY",lastPrice:"207.70",change:"7.95",pChange:"3.98",imgFileName:"CNX_REALTY_open.png"},{name:"CNX ENERGY",lastPrice:"7,301.05",change:"37.60",pChange:"0.52",imgFileName:"CNX_ENERGY_open.png"},{name:"CNX FMCG",lastPrice:"10,235.35",change:"-62.65",pChange:"-0.61",imgFileName:"CNX_FMCG_open.png"},{name:"CNX MNC",lastPrice:"4,631.55",change:"1.60",pChange:"0.03",imgFileName:"CNX_MNC_open.png"},{name:"CNX PHARMA",lastPrice:"4,749.95",change:"2.65",pChange:"0.06",imgFileName:"CNX_PHARMA_open.png"},{name:"CNX PSE",lastPrice:"2,744.85",change:"5.55",pChange:"0.20",imgFileName:"CNX_PSE_open.png"},{name:"CNX PSU BANK",lastPrice:"2,841.10",change:"15.95",pChange:"0.56",imgFileName:"CNX_PSU_BANK_open.png"},{name:"CNX SERVICE",lastPrice:"5,900.60",change:"-11.40",pChange:"-0.19",imgFileName:"CNX_SERVICE_open.png"},{name:"CNX IT",lastPrice:"6,262.10",change:"-69.65",pChange:"-1.10",imgFileName:"CNX_IT_open.png"},{name:"CNX SMALLCAP",lastPrice:"2,963.90",change:"31.95",pChange:"1.09",imgFileName:"CNX_SMALLCAP_open.png"},{name:"CNX 200",lastPrice:"2,421.50",change:"3.80",pChange:"0.16",imgFileName:"CNX_200_open.png"},{name:"CNX AUTO",lastPrice:"3,484.30",change:"-9.25",pChange:"-0.26",imgFileName:"CNX_AUTO_open.png"},{name:"CNX MEDIA",lastPrice:"1,139.60",change:"15.65",pChange:"1.39",imgFileName:"CNX_MEDIA_open.png"},{name:"CNX METAL",lastPrice:"2,726.75",change:"40.40",pChange:"1.50",imgFileName:"CNX_METAL_open.png"}]}';
$sValidJson = preg_replace("/([{,])([a-zA-Z][^: ]+):/", "$1\"$2\":", $sInvalidJson);

Also this updated example.

How to convert an invalid json into a valid json so that it could be parsed

If keys and values are not formatted as in the question, arbitrarily, you can't fix the JSON on your end, it should be fixed on the provider's side.

Assuming the key-value pairs are on separate lines you may use

StringBuffer fixedJSON = new StringBuffer();
Matcher m = Pattern.compile("(?<=\":\").*(?=\")").matcher(text);
while (m.find()) {
m.appendReplacement(fixedJSON, m.group().replace("\"", "_QUOTE_"));
}
m.appendTail(fixedJSON);
System.out.println(fixedJSON.toString());

The (?<=\":\").*(?=\") regex matches values located after ":" till the last " like this:

  • (?<=\":\") - a positive lookbehind that requires a ":" immediately to the left of the current location
  • .* - any zero or more chars other than line break chars as many as possible
  • (?=\") - a positive lookahead that requires a " immediately to the right of the current location.

Convert Invalid Json to Valid Json

This is more of a workaround and not really something you should do in production. In addition, the JSON generation should be fixed at the source. Having said that (only for the case you provided), replace consecutive double quote with a single double quote with string replace. Refer the implementation below:

package org.test;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

public class InvalidJSONTest {

public static void main(String[] args) throws Exception{

String invalid="{\r\n" +
" \"actualdeliverydate\": \"20210505\",\r\n" +
" \"actualdeliverytime\": \"091812\"\"\r\n" +
"}";

String mayBeValid=invalid.replaceAll("\"\"", "\"");

System.out.println(mayBeValid);

ObjectMapper mapper=new ObjectMapper();

JsonNode node=mapper.readValue(mayBeValid.getBytes(), JsonNode.class);

System.out.println(node.get("actualdeliverytime").asText());

}//main closing

}//class closing

convert invalid JSON string to JSON

IF your example syntax is the same as your real JSON, JSONLint says you need double quote for the name AND the value.

In this case only, use these replace calls:

var jsontemp = yourjson.replace((/([\w]+)(:)/g), "\"$1\"$2");
var correctjson = jsontemp.replace((/'/g), "\"");
//yourjson = "{one: 'one', two: 'two'}"
//jsontemp = "{"one": 'one', "two": 'two'}"
//correctjson = "{"one": "one", "two": "two"}"

However you should try to work with a valid Json in the first place.

Convert Invalid Json into valid json android?

I'm not going to do it for you as you haven't provided any code to what you have done but I will guide you on how to do it.
Iterate over the file or the string whatever you have it on, line by line.
Then instantiate a string builder to keep appending the valid JSON to.
append the first quote to the string builder, then use line.split(':') on a single line to get an array with the 1st half of the line and the second half. Then append the splitLine[0] (1st half) onto the string builder, append the colon, append the 2nd half of the line splitLine[1] and finally append the last quote and the comma. Now do this for every line and you will have valid JSON.

Here is a working version of what I explained above.

String inputString = "name: date, order: 1, required: true, type: date, placeholder: Expense Date";
StringBuilder validJson = new StringBuilder();
validJson.append("{");
String[] lineByLine = inputString.split(",");
for(int i =0; i< lineByLine.length; i++){
String[] lineSplit = lineByLine[i].split(":");
validJson.append('"').append(lineSplit[0].trim()).append('"').append(":").append('"').append(lineSplit[1].trim()).append('"').append(i==lineByLine.length-1?"}":",");
}
String finishedJSON = validJson.toString();
System.out.println(finishedJSON);

The bit at the end may look a little confusing

i==lineByLine.length-1?"}":","

But what it is doing is checking if it's the last line of JSON close it with a bracket, otherwise place a comma ready for the next attribute

How to make a invalid json to val;id json in python

Yes, it's not valid JSON, but you can pass the string to ast.literal_eval if you surround it with brackets:

>>> s="""{'Link': 'media/pdf/details/all-india-govt-jobs/other-all-india-govt-jobs/5472540504.pdf', 'Title': 'Corrigendum'},
... {'Link': 'media/pdf/details/all-india-govt-jobs/other-all-india-govt-jobs/3901883467.pdf', 'Title': 'Notification '},
... {'Link': 'http://www.nbagr.res.in/', 'Title': ' Official Website'}"""
>>> import ast
>>> ast.literal_eval("[" + s + "]")
[{'Link': 'media/pdf/details/all-india-govt-jobs/other-all-india-govt-jobs/5472540504.pdf', 'Title': 'Corrigendum'},
{'Link': 'media/pdf/details/all-india-govt-jobs/other-all-india-govt-jobs/3901883467.pdf', 'Title': 'Notification '},
{'Link': 'http://www.nbagr.res.in/', 'Title': ' Official Website'}]

php code to convert invalid json string to valid json string

You can use this. Please keep in mind that this eventually works just for your specified scenario. Other input can lead to problems. You have to check this yourself.

// use regex to get data
$matches = [];
preg_match_all('/([A-Za-z0-9]*?)\s:\s(?:(?:\'(.*)\')|(.*)),/', $str, $matches);

// combine arrays of matches, remove slashes
array_walk($matches[2], function(&$val, $key) use ($matches) {
if (empty($val)) {
$val = $matches[3][$key];
}
$val = str_replace("\'", "'", $val);
});

// create data array
$result = array_combine($matches[1], $matches[2]);

// convert data array to json
$json = json_encode($result);

print_r($json);

Output:

{  
"account":"rogersrmisports",
"brand":"Sportsnet",
"tags":"",
"cmsid":"2912963",
"wordCount":"3197",
"publishDate":"July 11, 2016",
"products":"",
"pages":"sportsnet : hockey : nhl : david amber q&a, part i: 'my job is not to be ron jr.'",
"section":"sportsnet : hockey",
"subSection":"sportsnet : hockey : nhl",
"contentName":"david amber q&a, part i: 'my job is not to be ron jr.'",
"complete90percent":"false"
}

json.loads converts valid JSON to invalid JSON

JSON library in python converts JSON string into a python understandable, list and dictionary. That is the reason the 'true' and 'false' strings were converted into python Boolean True and False. Usually, you don't store JSON objects but JSON strings in NoSQL databases.
Here is the official documentation, for more information
https://docs.python.org/3/library/json.html



Related Topics



Leave a reply



Submit