zoukankan      html  css  js  c++  java
  • UE4的JSON读写方式<二>

    声明:所有权利保留。

    转载必须说明出处:http://blog.csdn.net/cartzhang/article/details/43794409


    Json的Writer博客地址:

    http://blog.csdn.net/cartzhang/article/details/41009343  UE4的Json读写方式<一>

    UE4 的json读写方式

    一、UE4的Json解析代码

    有网友说UE4的解析有问题,解析出错。个人觉得应该是Json格式有问题。或解析的对象不正确,对象或数组用来对应的解析方式来解析的。

    解析方式有两种:类名为:FJsonSerializer,头文件名称为JsonSerializer.h

    template <class CharType>
    	static bool Deserialize( const TSharedRef< TJsonReader<CharType> >& Reader, TArray< TSharedPtr<FJsonValue> >& OutArray )
    	{
    		StackState State;
    		if ( !Deserialize( Reader, /*OUT*/State ) )
    		{
    			return false;
    		}
    
    		if ( State.Object.IsValid() )
    		{
    			return false;
    		}
    
    		OutArray = State.Array;
    		return true;
    	}
    
    	template <class CharType>
    	static bool Deserialize( const TSharedRef< TJsonReader<CharType> >& Reader, TSharedPtr<FJsonObject>& OutObject )
    	{
    		StackState State;
    		if ( !Deserialize( Reader, /*OUT*/State ) )
    		{
    			return false;
    		}
    
    		if ( !State.Object.IsValid() )
    		{
    			return false;
    		}
    
    		OutObject = State.Object;
    		return true;
    	}

    可以看出,第一个是针对数组的,第二个是针对Json对象的。请注意分别。


    二、样例代码

    CPP中包含头文件#include "Json.h"。

    void ATestPhysics1Character::JsonDeserialize()
    {
    	FString JsonValue = "[{"author":"4446545646544"},{"name":"jack"}]";
    	
    	FString JsonStr;
    	TArray<TSharedPtr<FJsonValue>> JsonParsed;
    	TSharedRef< TJsonReader<TCHAR> > JsonReader = TJsonReaderFactory<TCHAR>::Create(JsonValue);	
    		
    	bool BFlag = FJsonSerializer::Deserialize(JsonReader, JsonParsed);
    	if (BFlag)
    	{
    		int ArrayNumber = JsonParsed.Num();
    		if (ArrayNumber == 2)
    		{
    			FString FStringAuthor = JsonParsed[0]->AsObject()->GetStringField("author");
    			if (GEngine)
    			{
    				FString TmpString = "author :" + FStringAuthor;
    				GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TmpString);
    			}
    			FString FStringName = JsonParsed[1]->AsObject()->GetStringField("name");
    			if (GEngine)
    			{
    				FString TmpString = "name :" + FStringName;
    				GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TmpString);
    			}
    		}
    	}
    }

    代码不严谨,但是是个样子。

    三、结果截图



    ================

    若有问题,请随时联系!

    感谢浏览!


  • 相关阅读:
    个人:我的2011生活看板
    个人管理:公司做的稻盛阿米巴培训笔记
    使用TOGAF来做业务架构 价值驱动产品开发
    30天敏捷结果(21)正面失败,吸取教训,改善结果
    2010年12月blog汇总:敏捷个人
    30天敏捷结果(25):固定时间,灵活范围
    101与金根回顾敏捷个人:(11)执行力
    团队管理:设计团队的一周
    云:构建云计算的核心技术与平台
    读书笔记:千万别学英语
  • 原文地址:https://www.cnblogs.com/qitian1/p/6461965.html
Copyright © 2011-2022 走看看