Home > Software design >  End of Json string identification
End of Json string identification

Time:02-05

Json string : "{\n\t"tag": "Value",\n\t"attributes": {\n\t\t"rfid": "2"\n\t},\n\t"dat": "1"\n}

I am receiving the Json string from web server part by part i.e 8bytes at a time

When i am trying to collect the data in one buffer with the below logic in C

static char *jsonString ;
bool found_json = false;
jsonString = (char*)malloc (1024, sizeof(char));

while(data[i] != "}")
{
    found_json = true;
    for( i = 0; i< len; i  )
    {
        memcpy(jsonString, data, len);
    }       
    
}

can someday throw some light that how to detect end of the string of Json as there will be two closing Json object

CodePudding user response:

I think you have two proper ways: either fully parse the JSON (you can use some libraries for that) or somehow receive the length of the string (if this is a HTTP request then there should be Content-Length header which indicates the length). Things like messing with curly braces is not reliable because even a simple number like 1233 or boolean values like true are valid JSON strings.

CodePudding user response:

Here is some pseudo code for finding the end of your string:

open = 0;
close = 0;

while ( visit each character in your buffer )
{
  if (new character == '{')
    open  ;
  else if (new character == '}')
    close  ;

  if (open == 0) // Did we even start the JSON string yet?
    discard character
  else if (open == close) // Matching number of { and } found. We are done.
  {
    process JSON string
    open = close = 0; // Prepare for next incoming JSON string.
  }
}

  •  Tags:  
  • Related