解析嵌套 json 到 Unreal Engine 中的 TMap 4

Parse nested json to TMap in Unreal Engine 4

我在 UE4 中有一个嵌套的 json,结构如下:

{
    "boundary_points__per__cell": {
        "0": [{
                "x": 16.451330042628662,
                "y": 2.0813326861577965
            },
            {
                "x": 16.755262971791506,
                "y": 2.0406535171257136
            }
        ],
        "1": [{
                "x": -1.6378002918100634,
                "y": 4.9689057223409412
            },
            {
                "x": 0.9452331911724825,
                "y": 6.1469903490163311
            }
        ]
    }
}

我尝试使用其他线程建议使用 JsonObjectStringToUStruct 的建议技术。特别是我有以下结构来解析 json 逻辑:

USTRUCT()
struct FBoundaryPoint
{
    GENERATED_USTRUCT_BODY()

    UPROPERTY()
    int32 x;
    UPROPERTY()
    int32 y;
    
};

USTRUCT()
struct FBoundaryPoints
{
    GENERATED_USTRUCT_BODY()

    UPROPERTY()
    TArray<FBoundaryPoint> BoundaryPoints;
    
};

USTRUCT()
struct FVoronoiStruct
{
    GENERATED_USTRUCT_BODY()

    UPROPERTY()
    TMap<FString, FBoundaryPoints> boundary_points__per__cell;
};

然而,尽管我可以接收到键字符串(例如“0”、“1”),但我无法提取 json 数组的值。出于问题的考虑,边界点字典仅包含 2 个键(“0”、“1”)。在真实场景中,它包含的内容将比呈现的案例多得多。

任何帮助将不胜感激。

首先,这些不是整数,因此您可能希望使用 floatdouble 而不是 int32

关于为什么不解析的话题,基于a comment by nick.shin:

TMap 的使用不适用于 JSON -- 必须使用更简单的 TArray。

并且,为了给您最接近的“类似 TMap”的功能——您的 JSON 需要看起来像:

 {
   "boundary_points__per__cell": [
     { "key":"0", "value":[{ "x":16.451330042628662, "y":2.0813326861577965 }] },
     { "key":"1", "value":[{ "x":16.755262971791506, "y":2.0406535171257136 }] }
   ]
 }

使用 JsonObjectConverter 时——引擎不允许您“即时”创建“键”名称——您需要定义它以便引擎可以访问属性作为标准 C++ 结构(这使得设置和使用蓝图成为可能)。

话虽如此,您可以制作自己的 key:value 对——但是,您将需要使用更低级别的 TJsonWriterTJsonWriterFactory & TJsonReaderTJsonReaderFactory 函数。当您填写自己的可能正在使用 TMap 的 USTRUCT 时,您将需要握住引擎的手...

然后,您的自定义 JSON 解析器和编写器可以读取如下内容:

 {
   "MyMap": [
     { "MyKey1", { "0", "bliz" } },
     { "MyKey2", { "1", "blaz" } }
   ]
 }