JsonDataObjects icon indicating copy to clipboard operation
JsonDataObjects copied to clipboard

ToJson has some bug!

Open iamnewaplayer opened this issue 2 years ago • 8 comments

src "_GCV_0_A": "24", dst "_GCV_0d\u0000": "24",

I don't know what happened! i used JsonDataObjects.ToJson() to save to Mongo Sometimes this kind of error occurs some string end error whit key or value

iamnewaplayer avatar Aug 18 '22 08:08 iamnewaplayer

If you're taking the trouble to report an issue, at least supply all relevant details. (And a small fully contained reproduction scenario)

PatrickvL avatar Aug 18 '22 09:08 PatrickvL

I can't reproduce this with the following code:

procedure TestTJsonObject.TestIssue71;
var
  Json: TJsonObject;
  S: string;
begin
  Json := TJsonObject.Parse('{ "_GCV_0_A": "24" }') as TJsonObject;
  try
    CheckEquals(
      '{' + JsonSerializationConfig.LineBreak +
      JsonSerializationConfig.IndentChar + '"_GCV_0_A": "24"' + JsonSerializationConfig.LineBreak +
      '}' + JsonSerializationConfig.LineBreak, Json.ToJSON(False));
  finally
    Json.Free;
  end;
end;

You could try to disable one or both of the following defines:

  • USE_LAST_NAME_STRING_LITERAL_CACHE
  • USE_FAST_STRASG_FOR_INTERNAL_STRINGS

Maybe something is fishy with those optimizations, as the string seems to be modified. Or there is something else overwriting the memory outside of JsonDataObjects, that possibility always exists.

ahausladen avatar Aug 18 '22 15:08 ahausladen

i try it,but do not work; i have only one line use this

UserItem.Custom['GCV'+nAbilSite.ToString+'_A']:=nValue.ToString;

property Custom[const v: string]: String read GetStringValue write SetStringValue; procedure TUserItem.SetStringValue(const v: string; Value: string); begin if v.Length>0 then Values.O['Custom'].S[v] := Value; end;

some time UserItem.values.tojson has this error; maybe key empty maybe like _GCV_0d\u0000

i assign this Custom Value only this one line.

iamnewaplayer avatar Aug 19 '22 09:08 iamnewaplayer

some places i used useritem.values = useritem.values.clone

iamnewaplayer avatar Aug 19 '22 09:08 iamnewaplayer

like this

HumData.O['BagItems'].O[i.ToString] := pTUserItem(m_ItemList.Items[i]).Values.Clone;

iamnewaplayer avatar Aug 19 '22 09:08 iamnewaplayer

i used delphi 11.0

iamnewaplayer avatar Aug 19 '22 09:08 iamnewaplayer

How about providing a project that reproduces the bug, so some others can test it for you. Leaving shouty comments on the ticket is of no use. Thanks.

fastbike avatar Aug 19 '22 10:08 fastbike

can't reproduces the bug by myself.. it is occur in production environment

iamnewaplayer avatar Aug 19 '22 10:08 iamnewaplayer