2017-01-20 5 views
0

でデータを交換してください。解析ネストされたJSONと私は内のデータを解析し、交換する必要がある複雑なJSONレスポンスを持つC#の

これは、1日からちょうどスニップですが、応答内のすべての日実行する必要があります。

これを解析して値を変更するにはどうすればよいですか。 変更してホストに送り返す必要があります。

{ 
    "schedulePeriods":` [ 
    { 
     "day": "Monday", 
     "periodType": "WakeOcc1", 
     "startTime": 26, 
     "isCancelled": false, 
     "heatSetpoint": 70.0, 
     "coolSetpoint": 75.0, 
     "fanMode": "Auto" 
    }, 
    { 
     "day": "Monday", 
     "periodType": "LeaveUnocc1", 
     "startTime": 32, 
     "isCancelled": false, 
     "heatSetpoint": 65.0, 
     "coolSetpoint": 75.0, 
     "fanMode": "Auto" 
    }, 
    { 
     "day": "Monday", 
     "periodType": "ReturnOcc2", 
     "startTime": 66, 
     "isCancelled": false, 
     "heatSetpoint": 72.0, 
     "coolSetpoint": 75.0, 
     "fanMode": "Auto" 
    }, 
    { 
     "day": "Monday", 
     "periodType": "SleepUnocc2", 
     "startTime": 0, 
     "isCancelled": false, 
     "heatSetpoint": 65.0, 
     "coolSetpoint": 75.0, 
     "fanMode": "Auto" 
    }, 
    { 
     "day": "Tuesday", 
     "periodType": "WakeOcc1", 
     "startTime": 26, 
     "isCancelled": false, 
     "heatSetpoint": 70.0, 
     "coolSetpoint": 75.0, 
     "fanMode": "Auto" 
    }, 

ので、私が今持っていることはこれです: `

class Day 
    { 
     public string day { get; set; } 
     public string periodType { get; set; } 
     public int startTime { get; set; } 
     public double heatSetpoint { get; set; } 
     public double coolSetpoint { get; set; } 


     public override string ToString() 
     { 
      return string.Format("{0}\n{1}\n{2}\n{3}\n{4}", day, periodType, startTime, heatSetpoint, coolSetpoint); 
     } 
    } 

    static void Main(string[] args) 
    { 

     String JSONstring = File.ReadAllText("json.json"); 
     JObject o = JObject.Parse(JSONstring); 


     string day = (string)o.SelectToken("schedulePeriods[0].day"); 
     string periodType = (string)o.SelectToken("schedulePeriods[0].periodType"); 
     int startTime = (int)o.SelectToken("schedulePeriods[0].startTime"); 
     double heatSetpoint = (double)o.SelectToken("schedulePeriods[0].heatSetpoint"); 
     double coolSetpoint = (double)o.SelectToken("schedulePeriods[0].coolSetpoint"); 
     Console.WriteLine("{0}\n{1}\n{2}\n{3}\n{4}",day,periodType,startTime,heatSetpoint,coolSetpoint); 


     Console.WriteLine("Change Value to:"); 
     string answer = Console.ReadLine(); 

     day = answer; 


     Console.WriteLine("new value {0}", day); 
       string data = JsonConvert.SerializeObject(JSONstring,Formatting.Indented); 
      File.WriteAllText("newfile.json", data); 
       Console.ReadLine(); 

}

私は、第一波括弧からデータを取得していないが、することができます。 私は各アレイから取得する必要があります。 また、指定されたエントリを変更し、適切なjsonフォーマットで編集したファイルを保存したい(これはまったく機能しません)。

解決済みです。 は

+0

何らかの理由で 'Newtonsoft.Json'を使用できませんか? – BradleyDotNET

+0

jsonのデータと一致するようにc#でモデルを作成します。 Newtonsoft.Json(既に提案されているようなもの)を使って、着信Jsonをオブジェクトに解析します。必要なものを変更してから、もう一度使用してオブジェクトをjsonに戻します。 – Chris

+0

newtonsoftのライブラリを使用してください。 JSONスキーマと一致するモデルを作成する次に、そのモデルに対してシリアル化または逆シリアル化を行います。あなたのモデルにはデータが取り込まれ、デシリアライズされたり、モデル化されたモデルが作成され、jsonの文字列にシリアル化されます。 - 私の答えを参照してください。http://stackoverflow.com/questions/21885243/cannot-deserialize-the-current-json-array-eg-1-2-3/21885758#21885758 – Dayan

答えて

2

アプリケーション

public class RootObject 
{ 
    public List<SchedulePeriod> schedulePeriods { get; set; } 
} 

public class SchedulePeriod 
{ 
    public string day { get; set; } 
    public string periodType { get; set; } 
    public int startTime { get; set; } 
    public bool isCancelled { get; set; } 
    public double heatSetpoint { get; set; } 
    public double coolSetpoint { get; set; } 
    public string fanMode { get; set; } 
} 

をして、次のクラスを作成し、

public static T DeserializeObject<T>(string jsonObj) 
{ 
    return JsonConvert.DeserializeObject<T>(jsonObj, 
     new JsonSerializerSettings() { ReferenceLoopHandling = ReferenceLoopHandling.Ignore, Formatting = Formatting.Indented }); 
} 

のようなあなたのJSONをデシリアライズするためにNewtonsoft.Jsonを使用し、

RootObject obj = DeserializeObject<RootObject>(your_json); 
のようにそれを呼び出すご意見をお寄せいただきありがとうござい

あなたのスケジュールにアクセスしてください。

希望します。

関連する問題