passing JSON string via command line

14,695

Solution 1

I guess double quots are wiped out because they've meaning inside the CLI world.

I would say that converting the whole JSON into a base 64 string, and then, in the CLI internally turn into regular string again should work:

var jsonStr = Convert.ToBase64String(Encoding.UTF8.GetBytes(new JavaScriptSerializer().Serialize(obj)));

// When your receive the whole string....
var jsonStr = Encoding.UTF8.GetString(Convert.FromBase64String(inputStr));

// Now deserialize your JSON string into a regular .NET object...

Answering to some comment from @Panagiotis Kanavos...

The CLI doesn't corrupt any string - people would have noticed by now. If the OP sends a different string, the problem is in that code, not the CLI

As I pointed out in comments as answers to your ones, I know that inside .NET world we don't need to escape a JSON and maybe in other environments there's also no need to do this.

I suggested base 64 approach because it's a bullet-proof solution, and as OP provided few details and insufficient code samples, at the end of the day, I believe it's the base 64 approach is as valid as just escaping double quots, but it also provides an added value: it escapes any special character in addition to ".

BTW, there're actual cases where a CLI prevents some characters. redis-cli on Windows doesn't allow curly brackets...

Update 2

Since @Panagiotis Kanavos has confused CLI with Common Language Interface, I want to be sure that everyone that reads my answer understand CLI as Command Line Interface.

Solution 2

Just escape quotes with backslashes so CMD will not remove quotes inside a JSON.

String which should be passed:

"{\"name\":\"abc\",\"place\":\"xyz\"}"

String which will be received:

{"name":"abc","place":"xyz"}

Use this code to escape the string:

string jsonString = new JavaScriptSerializer().Serialize(obj);
string escapedString = jsonString.Replace("\"", "\\\"");
Share:
14,695
Kapil
Author by

Kapil

**Building highly scalable distributed systems and next generation data platform **

Updated on July 09, 2022

Comments

  • Kapil
    Kapil almost 2 years

    I'm serialize an object to json string and passing that to an app through command line but when I receive the arguments in the app, this is no longer a json string but a regular string .

    I'm using below code to create json string

    var jsonStr = new JavaScriptSerializer().Serialize(obj);
    

    string that I'm passing - "{"name":"abc","place":"xyz"}"
    string that I receive - "{name:abc,place:xyz}";

    How can I maintain the structure of the json string ?