1

Тема: Як написати парсер для JSON ?

Прів. Тут така справа, що в мене є JSON-файл, котрий потрібно завантажити і створити з нього купку об'єктів. І от так виходить, що жоден з існуючих плагінів не підходить мені для десереалізації, тому що проект створюється в одній прозі, потім переноситься на іншу платформу, і вже знову збирається в іншій прозі під іншу платформу.
Так от я і вирішив, що якщо це мені потрібно конкретно під мою задачу і конкретно під мій JSON-файл, то чому б і не написати свого десереалізатора?
Ну то я щось почав-почав, а потім щось застряг-застряг, і ніяка думка в голову не лізе.
ШО РОБИТИ???

using UnityEngine;
using System.Collections.Generic;

public enum State
{
    OpenedChapter,
    OpenedPage,
    None
}

public class MyJsonParser {

    public State state = State.None;

    List<ChapterModel> Parse(string json)
    {
        List<ChapterModel> result = new List<ChapterModel>();
        ChapterModel chapter;
        PageModel page;

        for(int i = 0; i<json.Length; i++)
        {
            char ch = json[i];

            switch(state)
            {
                case State.None:

                    if(ch=='{' && state==State.None)
                    {
                        state = State.OpenedChapter;
                        chapter = new ChapterModel();
                    }

                    if(ch=='"' && state==State.OpenedChapter)
                    {
                        if (json[i + 1] =='p')
                    }

                    break;

                case State.OpenedChapter:



                    break;

                case State.OpenedPage:



                    break;
            }
        }


        return result;
    }
}

роблю під конкретно от таку штуку

[
  {
    "id": 1,
    "pages": [
      {
        "BackgroundArt": "pg1pt01.jpg",
        "ForeAddedArt": "pg1pt02.png",
        "VFXloop": "desert storm between BGArt and FArt",
        "VFXappeared": "from fade to screen (1s)",
        "VFXnextSlide": "fade to black (1s)",
        "BGAmbientLoop": null,
        "BGMusicLoop": "music_titles.mp3",
        "BGVoiceLoop": null,
        "VFXSound": null,
        "MusicSound": null,
        "VoiceSound": null
      },
      {
        "BackgroundArt": "pg2pt01.jpg",
        "ForeAddedArt": null,
        "VFXloop": "desert storm",
        "VFXappeared": "from fade to screen (1s)",
        "VFXnextSlide": null,
        "BGAmbientLoop": "amb_storm.mp3",
        "BGMusicLoop": null,
        "BGVoiceLoop": null,
        "VFXSound": "shuttle_flight_passby.mp3",
        "MusicSound": null,
        "VoiceSound": null
      }
    ]
  },
  {
    "id": 2,
    "pages": [
      {
        "BackgroundArt": "pg11pt01.jpg",
        "ForeAddedArt": null,
        "VFXloop": null,
        "VFXappeared": "from fade to screen (1s)",
        "VFXnextSlide": null,
        "BGAmbientLoop": "amb_storm_outside_engine_inside.mp3",
        "BGMusicLoop": null,
        "BGVoiceLoop": null,
        "VFXSound": null,
        "MusicSound": null,
        "VoiceSound": null
      },
      {
        "BackgroundArt": "previous kept",
        "ForeAddedArt": "pg12pt01.png",
        "VFXloop": null,
        "VFXappeared": null,
        "VFXnextSlide": "fade to black (1s)",
        "BGAmbientLoop": "previous kept",
        "BGMusicLoop": null,
        "BGVoiceLoop": null,
        "VFXSound": null,
        "MusicSound": null,
        "VoiceSound": "pilot002.mp3"
      }
    ]
  }
]
Говоріть українською! Живіть українською! Відчувайте українською!

2

Re: Як написати парсер для JSON ?

я то погано пояснив. В мене є список з "частин", кожна "частина" містить список "сторінок", ну а кожна "сторінка" має свої пари {key:value}
от, я вже вмію виводити всі імені і значення :3

using UnityEngine;
using System.Collections.Generic;

public enum State
{
    OpenedChapter,
    OpenedPage,
    None
}

public class MyJsonParser {

    public static State state = State.None;

    public static List<ChapterModel> Parse(string json)
    {
        List<ChapterModel> result = new List<ChapterModel>();
        ChapterModel chapter;
        PageModel page;

        for(int i = 0; i<json.Length; i++)
        {
            char ch = json[i];

            switch(state)
            {
                case State.None:
                    if(ch=='{')
                    {
                        state = State.OpenedChapter;
                        chapter = new ChapterModel();
                    }
                    break;

                case State.OpenedChapter:
                    if (ch == '"')
                    {
                        Debug.Log("chapter: "+GetNext(ref i, json));
                    }
                    if(ch=='{')
                    {
                        state = State.OpenedPage;
                    }
                    if(ch=='}')
                    {
                        state = State.None;
                    }
                    break;

                case State.OpenedPage:
                    if (ch == '"')
                    {
                        Debug.Log("page: " + GetNext(ref i, json));
                    }

                    if (ch == '}')
                        state = State.OpenedChapter;

                    break;
            }
        }


        return result;
    }

    private static string GetNext(ref int i, string json)
    {
        int index = json.IndexOf('"', i + 1);
        string substr = json.Substring(i + 1, index - i - 1);
        i = index;
        return substr;
    }
}

http://puu.sh/lCTei/bc863b55b4.png
тепер тре зробити з цього саме пари ключ:значення

Говоріть українською! Живіть українською! Відчувайте українською!

3

Re: Як написати парсер для JSON ?

ой, там же не всі значення знаходяться в скобках =(

Говоріть українською! Живіть українською! Відчувайте українською!

4

Re: Як написати парсер для JSON ?

У юніті немає парсеру для JSON?

5

Re: Як написати парсер для JSON ?

Itari написав:

У юніті немає парсеру для JSON?

судячи з кількості питань - "how to parse JSON in Unity?" та плагінів для роботи з JSON - ні.
та й навіщо, якщо воно дозволяє підключати бібліотеки розроблені під C# ?

Говоріть українською! Живіть українською! Відчувайте українською!

6

Re: Як написати парсер для JSON ?

ах, так, я вже то зробив, так шо можете зачиняти тему

Говоріть українською! Живіть українською! Відчувайте українською!

7

Re: Як написати парсер для JSON ?

ах, так, я вже то зробив, так шо можете зачиняти тему

Напишіть як ви вирішили дану проблему ;)

8

Re: Як написати парсер для JSON ?

funivan написав:

ах, так, я вже то зробив, так шо можете зачиняти тему

Напишіть як ви вирішили дану проблему ;)

ви мене не любите, тому нє

Говоріть українською! Живіть українською! Відчувайте українською!