使用4.5中的新System.Json或Nuget的等效System.Json for 4.0如何格式化输出,使其以更易读的形式缩进和间隔?
所以这
dynamic jsonObj = new JsonObject();
jsonObj.firstName = "John";
jsonObj.lastName = "Smith";
Debug.WriteLine((string)jsonObj.ToString());
Run Code Online (Sandbox Code Playgroud)
输出这个
{"firstName":"John","lastName":"Smith"}
Run Code Online (Sandbox Code Playgroud)
当我想要这个
{
"firstName": "John",
"lastName": "Smith"
}
Run Code Online (Sandbox Code Playgroud) 我需要加载一个 JSON 文件,更改一个值,然后将其写回磁盘。
使用 SuperObject 很容易,但我如何使用 System.JSON 单元做同样的事情?
const
PathToX = 'AllCategories.Category[0].subCategory[0].products[0].views.view[0].x';
var
JsonFilename: string;
JO: ISuperObject; // from the SuperObject unit
JV: TJsonValue; // from the System.Json unit
begin
JsonFilename := ExtractFilePath(Application.ExeName)+'product.json');
// Using the SuperObject unit:
JO := SO(TFile.ReadAllText(JsonFilename));
WriteLn('The old value of "x" is ', JO[PathToX].AsString);
WriteLn('Changing value of x to "123"');
JO.S[PathToX] := '123'; // Set the value of "x"
WriteLn('The new value of "x" is ', JO[PathToX].AsString);
// Now trying to do the same thing …Run Code Online (Sandbox Code Playgroud) 我正在调用 Google Maps 并使用 System.JSON 来解析对象。我使用以下方法抓取我的对象:
double placeLat = json["results"][0]["geometry"]["location"]["lat"];
Run Code Online (Sandbox Code Playgroud)
然后我想检查第三个对象是否存在,如果是,则执行一些操作,但显然以下操作失败。我知道谷歌地图在这种情况下返回 2 个对象,我想检查第三个对象以避免对 null 执行操作并进一步传递它们。当谷歌地图返回 3 个对象时,以下工作正常,所以我相信我的条件是错误的。
if (json["results"][2] != null) {
}
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
指数超出范围。必须是非负的并且小于集合的大小。参数名称:索引
关于如何在使用 System.JSON 的情况下正确构建 if 语句的任何想法?
system.json ×3
c# ×2
json ×2
.net ×1
delphi ×1
formatting ×1
google-maps ×1
if-statement ×1
superobject ×1