2012-10-08 45 views
0

我有以下格式的文件:文本文件 - > JSON - > IOS陣列

/Users/devplayerx/Sandbox/pics/images/001012DG-161.JPG 
    pixelWidth: 1600 
    pixelHeight: 1050 
filename: 001012DG-161.JPG 

/Users/devplayerx/Sandbox/pics/images/001019DG-151 COPY.JPG 
    pixelWidth: 1600 
    pixelHeight: 1050 
filename: 001019DG-151 COPY.JPG 

並希望最終具有的iOS字典的文件名作爲密鑰,並且不是詞典或以pixelWidth和pixelHeight作爲值的數組。我正在考慮將我的文本文件轉換爲JSON文件,然後使用NSJSONSerialization解析它,但我不確定如何將我的文本文件轉換爲JSON。另外,我想從文本文件中刪除完整路徑,因爲它不是必需的。

+0

可以肯定,你的意思是這個文本文件是靜態的,在編譯時已知?例如,這個文本文件在運行時不會被WebService服務(因此,您可以將此文本文件轉換爲您想要的任何格式,並將轉換後的文件包含在最終應用程序中)?你不想在運行時使用ObjC代碼來轉換它,對嗎? – AliSoftware

回答

1

這裏是一個Perl腳本,似乎做的工作:

#!/usr/bin/perl 
use strict; 
use warnings; 

open FILE,"< yourfile.txt" or die "I/O error : $!\n"; 
my $w = 0; 
my $h = 0; 
my $f = ""; 

print "{\n"; 
while (my $line = <FILE>) 
{ 
    if ($f) 
    { 
     print ",\n"; 
     $f = ""; 
    } 
    if ($line =~ /pixelWidth: ([0-9]+)/) 
    { 
     $w = $1; 
    } 
    if ($line =~ /pixelHeight: ([0-9]+)/) 
    { 
     $h = $1; 
    } 
    if ($line =~ /filename: (.*)$/) 
    { 
     $f = $1; 

     print "\t\"$f\" : [ $w, $h ]" 
    } 
} 
print "\n}\n"; 
close FILE; 

請注意,我不是在Perl專家,所以也許可以改善,但使用它在你的輸入文件似乎產生您預計JSON如下:

prompt$ perl scr.pl 
{ 
    "001012DG-161.JPG" : [ 1600, 1050 ], 
    "001019DG-151 COPY.JPG" : [ 1600, 1050 ] 
} 

注意,一旦你有你的JSON文件,您可以選擇將其使用plutil工具轉換成plist文件。例如,perl scr.pl | plutil -convert binary1 -o yourfile.plist -將從perl scr.pl(我的腳本)產生的JSON中創建yourfile.plist。然後,您可以使用[NSDictionary dictionaryWithContentsOfFile:pathToYourFilePlist]輕鬆地在代碼中讀取此文件,並可直接在一行中作爲NSDictionary訪問您的數據。

0

JSON對象看起來是這樣的:

{ picture: { path : "thePath", pixelWidth: 1600, pixelHeight: 1050, filename : "name" }}

我會再採取行並且把它們放在一個列表,在列表中循環,並最終吐出所有的東西在另一個文本文件進行轉換使用上述對象符號。

你需要什麼語言來編寫工具將其轉換爲json?

+0

我使用bash生成文件,並使用Python刪除了完整路徑的行。我剩下的文件名,pixelHeight和pixelWidth,我需要轉換爲JSON。 bash或者Python對於那個很棒。 – ratsimihah

0

您可以使用NSInputStream來讀取文本文件,在每次迭代中,您都可以按自己想要的方式構建字典。

之後,只需使用NSJSONSerialization。

相關問題