2014-12-25 4 views
4

Я использую SimpleJSON для Unity3d. И я хочу добавить int в JSONClass.Unity3d SimpleJSON add int to JSONClass

Например мне нужно: JSON {"attr" : 4}

JSONClass cl = new JSONClass(); 

Я попытался это:

cl["attr"].AsInt = 4; 

И это:

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

и любые другие случаи. В любом случае я получаю {"attr" : "4"}, где 4 - строка.

Как я могу добавить int?

ответ

8

В текущей реализации это невозможно.

Так я добавил новые типы:

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 
    } 

И добавить проверочные типа в JSONData:

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); 

    } 

Теперь int, float, double будет добавляется как число без ". И будет выглядеть примерно так: {"attr" : 4}

1

Что вы думаете об этом? https://gist.github.com/lcnvdl/4532671a8f4dbbb6f306

Для использования просто сделать:

JsonHelper.Json(myObject); 

Вы можете использовать его с объектами, геймобжекты, ScriptableObjects, MonoBehaviour и т.д.

+0

я думаю, что это медленнее, потому что отражения. – Suvitruf

 Смежные вопросы

  • Нет связанных вопросов^_^