- Notifications
You must be signed in to change notification settings - Fork 187
/
Copy pathJsonExtensions.cs
95 lines (81 loc) · 3.44 KB
/
JsonExtensions.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
namespaceNamespacePrefixPlaceholder.PowerShell.JsonUtilities
{
usingNewtonsoft.Json.Linq;
usingNewtonsoft.Json;
usingSystem;
usingSystem.Linq;
publicstaticclassJsonExtensions
{
/// <summary>
/// Converts "null" strings to actual null values, replaces empty objects, and cleans up arrays.
/// </summary>
/// <param name="token">The JSON token to process.</param>
/// <returns>A cleaned JSON string with unnecessary null values removed.</returns>
publicstaticstringRemoveDefaultNullProperties(thisJTokentoken)
{
try
{
ProcessToken(token);
returntoken.ToString();
}
catch(Exception)
{
returntoken.ToString();// Return original JSON if an error occurs
}
}
privatestaticJTokenProcessToken(JTokentoken)
{
if(tokenisJObjectjsonObject)
{
// Recursively process remaining properties
foreach(varpropertyinjsonObject.Properties().ToList())
{
JTokencleanedValue=ProcessToken(property.Value);
// Convert explicit "null" strings to actual null
if(property.Value.Type==JTokenType.String&&property.Value.ToString().Equals("null",StringComparison.Ordinal))
{
property.Value=JValue.CreateNull();
}
if(property.Value.ToString().Equals("{\r\n}",StringComparison.Ordinal))
{
property.Value=JObject.Parse("{}");// Convert empty object to {}
}
}
// Remove the object itself if ALL properties are removed (empty object)
returnjsonObject.HasValues?jsonObject:null;
}
elseif(tokenisJArrayjsonArray)
{
for(inti=jsonArray.Count-1;i>=0;i--)
{
JTokenitem=jsonArray[i];
// Process nested objects/arrays inside the array
if(itemisJObject||itemisJArray)
{
if(item.ToString().Equals("{\r\n}",StringComparison.Ordinal))
{
JTokencleanedItem=ProcessToken(item);
jsonArray[i]=JObject.Parse("{}");// Convert empty object to {}
}
else
{
JTokencleanedItem=ProcessToken(item);
jsonArray[i]=cleanedItem;// Update with cleaned version
}
}
elseif(item.Type==JTokenType.String&&item.ToString().Equals("null",StringComparison.Ordinal))
{
jsonArray[i]=JValue.CreateNull();// Convert "null" string to JSON null
}
elseif(item.Type==JTokenType.String&&item.ToString().Equals("nullarray",StringComparison.Ordinal))
{
jsonArray.RemoveAt(i);
i--;
}
}
returnjsonArray.HasValues?jsonArray:null;
}
returntoken;
}
}
}