ProjectDDD/Assets/0.Datas/02.Scripts/GenerateGoogleSheet/Core/GoogleSheetDiffHelper.cs

67 lines
2.1 KiB (Stored with Git LFS)
C#

using Newtonsoft.Json.Linq;
using System.Collections.Generic;
public static class GoogleSheetDiffHelper
{
public static List<(string Sheet, string Field, int RowIndex, string OldValue, string NewValue)> CompareJsonDiff(string oldJson, string newJson)
{
var diffs = new List<(string, string, int, string, string)>();
if (string.IsNullOrEmpty(oldJson) || string.IsNullOrEmpty(newJson))
return diffs;
var oldObj = JObject.Parse(oldJson);
var newObj = JObject.Parse(newJson);
foreach (var sheet in newObj)
{
var sheetName = sheet.Key;
if (!oldObj.TryGetValue(sheetName, out var oldSheetToken))
continue;
var oldArray = oldSheetToken as JArray;
var newArray = sheet.Value as JArray;
// Row-by-row 비교 (1번 줄부터 데이터 시작)
for (int i = 1; i < newArray.Count; i++)
{
if (i >= oldArray.Count)
break;
var newRow = (JObject)newArray[i];
var oldRow = (JObject)oldArray[i];
foreach (var prop in newRow.Properties())
{
var field = prop.Name;
string newValue = prop.Value.ToString();
string oldValue = oldRow.TryGetValue(field, out var oldVal) ? oldVal.ToString() : "";
if (oldValue != newValue)
{
diffs.Add((sheetName, field, i, oldValue, newValue));
}
}
}
}
return diffs;
}
public static string GenerateDiff(string oldJson, string newJson)
{
var diffs = CompareJsonDiff(oldJson, newJson);
if (diffs.Count == 0)
return "No differences found.";
var sb = new System.Text.StringBuilder();
sb.AppendLine("[GoogleSheetManager] 변경된 필드들:");
foreach (var (sheet, field, rowIndex, oldVal, newVal) in diffs)
{
sb.AppendLine($"{sheet} / Row {rowIndex} / {field} : '{oldVal}' → '{newVal}'");
}
return sb.ToString();
}
}