2014-12-25 37 views
4

我对Unity3d使用SimpleJSON。我想添加intJSONClassUnity3d SimpleJSON将int添加到JSONClass

例如,我需要的JSON:{"attr" : 4}

JSONClass cl = new JSONClass(); 

我尝试这样做:

cl["attr"].AsInt = 4; 

这:

cl["attr"] = new JSONData(4); 

而且任何其他案件。无论如何,我得到{"attr" : "4"}其中4是字符串。如何将int添加到其中?

回答

8

在目前的实现中,这是不可能的。

所以我增加了新的类型:在JSONData

public enum JSONBinaryTag 
    { 
     Array   = 1, 
     Class   = 2, 
     Value   = 3, 
     IntValue  = 4, 
     DoubleValue  = 5, 
     BoolValue  = 6, 
     FloatValue  = 7, 
     LongValue   = 8, 
     String   = 9, // <-- new 
     Number = 10   // <-- new 
    } 

并添加类型检查:

public class JSONData : JSONNode{ 
    static Regex m_Regex = new Regex(@"^[0-9]*(?:\.[0-9]*)?$"); 
    private JSONBinaryTag m_Type = JSONBinaryTag.String; 

    private string m_Data; 
    public override string Value { 
     get { return m_Data; } 
     set { m_Data = value; } 
    } 
    public JSONData(string aData){ 
     m_Data = aData; 

     // check for number 
     if (m_Regex.IsMatch(m_Data)) 
      m_Type = JSONBinaryTag.Number; 
     else 
      m_Type = JSONBinaryTag.String; 

    } 
    [...] 
} 

而改变toString()方法:

public override string ToString(){ 
     if (m_Type == JSONBinaryTag.String) 
      return "\"" + Escape(m_Data) + "\""; 
     else 
      return Escape(m_Data); 

    } 

现在intfloatdouble会被添加为没有0123的号码。并且看起来像这样:{"attr" : 4}