-2

処理する必要があるが再作成できない履歴データがあります。私が抱えている問題は、識別子を引用符で囲んでいないため、 を使用して解析できないことJSON.parse(data)です。

サンプルデータは次のとおりです。

[2013-10-04 12:14:39.987] [INFO] clientOut - broadcast: 97e27acf-0f4d-4021-a3a9-7e301e22ad59 #000006425 vehicle telemetry:  { speed: 0.13,
  velocity: { x: 0, y: 0, z: 0 },
  attitude: 
   { pitch: 3.309539134025706,
     roll: 6.72947632315362,
     yaw: 136.35147621231474,
     x: 3.309539134025706,
     y: 6.72947632315362,
     z: 136.35147621231474 },
  altitude: 7.023,
  temperature: 0,
  heading: 136.35147621231474,
  counter: '000006425' }

上記のエントリは、node.js で log4js を介して作成されました。JSON のようなデータを引き出すことはできますが、それでも有効ではありません。次のようにする必要があります。

{ "speed": 0.13,
  "velocity": { "x": 0, "y": 0, "z": 0 },
  "attitude": 
   { "pitch": 3.309539134025706,
     "roll": 6.72947632315362,
     "yaw": 136.35147621231474,
     "x": 3.309539134025706,
     "y": 6.72947632315362,
     "z": 136.35147621231474 },
  "altitude": 7.023,
  "temperature": 0,
  "heading": 136.35147621231474,
  "counter": "000006425" }

これどうやってするの?各識別子に引用符を適用する簡単な方法はありますか?

4

1 に答える 1

1

関連のない質問への回答の助けを借りてそれを理解しました(ここを参照)。

私の解決策は、次のようにデータを処理することでした。

var t = "{ speed: 0.09, velocity: { x: 0, y: 0, z: 0 }, attitude: { pitch: 0.9244929980310828, roll: -20.314323016242536, yaw: 155.80094530792465, x: 0.9244929980310828, y: -20.314323016242536, z: 155.80094530792465 }, altitude: 23.357, temperature: 0, heading: 155.7801815328478, vsi: 0, position: { latitude: 0, longitude: 0, altitude: 0 }, throttle: 0, batteryVoltage: 38.696, batteryCurrent: 0, batteryCharge: 0, commDropRate: 0, commErrors: 0, dirty: false, batteryRemaining: 0, counter: '000000001' }";

t = t.replace(/(['"])?([a-zA-Z0-9_]+)(['"])?:/g, '"$2":');
t = t.replace(/'/g, '"');

console.log("data: " + t);
console.log("data: " + JSON.parse(t));

最初の置換で引用符の問題が修正され、2 回目の置換でカウンター属性の単一引用符が修正されます。Anthonyの正規表現に感謝します。

于 2013-10-26T07:06:17.403 に答える