将Java属性文件转换为JSON字符串

时间:2013-08-29 09:27:39

标签: java json parsing

我正在编写一个简单的解析器来将包含name=value对中的条目的java属性文件转换为json字符串。 下面是代码。该代码要求每个条目都在一个新行中:

      sCurrentLine = br.readLine();
        while ((sCurrentLine) != null)
        {                           
              config+=sCurrentLine.replace('=', ':');
              sCurrentLine = br.readLine()
              if(sCurrentLine!=null)
              config+=",";
        }
        config+="}";

除了属性文件中有额外的空新行外,该函数工作正常。 (例如:假设我在props文件中写入最后一个条目,然后点击两个输入,该文件将在最后一个条目后包含两个空的新行)。虽然预期输出为{name1:value1,name2:value2},但在上述情况下,当存在额外的新行时,我将输出作为{name1:value1,name2:value2,}。尾随,的数量随着新的空行数增加。

我知道它,因为readLine()读取空行,而逻辑上它不应该,但我该如何更改?

3 个答案:

答案 0 :(得分:2)

这可以使用contains()方法解决。只需确保您的行中存在"=" ..

while ((sCurrentLine) != null)
    {
          if(sCurrentLine.contains("=") {                           
              config+=sCurrentLine.replace('=', ':');
              sCurrentLine = br.readLine()
              if(sCurrentLine!=null)
                  config+=",";
          }
    }

示例

sCurrentLine = "name=dave"
if(sCurrentLine.contains("=")) // Evaluates to true.
      // Do logic.

sCurrentLine = ""
if(sCurrentLine.contains("=")) // Evaluates to false.
     // Don't do logic.

sCurrentLine = "\n"
if(sCurrentLine.contains("=")) // Evaluates to false.
     // Don't do logic.
  

我知道它,因为readLine()读取空行,而逻辑上它不应该,但我该如何更改?

readLine()会将所有内容读取到\n。这是如何检查新线路的。您之前没有\n,也没有任何内容,因此您的行将由""组成,因为省略了\n

轻微增强

如果你想确保你的行肯定有一个名字和一个属性,那么你可以使用一些简单的正则表达式。

if(s.CurrentLine.matches("\\w+=\\w+"))
// Evaluates to any letter, 1 or moe times, followd by an "=", followed by letters.

答案 1 :(得分:1)

一种方法是使用方法trim()检查当前行是否为空:

  sCurrentLine = br.readLine();
    while ((sCurrentLine) != null)
    {                           
          If ("".equals(sCurrentLine.trim()) == false)
          {
            config+=sCurrentLine.replace('=', ':');
            sCurrentLine = br.readLine()
            if(sCurrentLine!=null)
            config+=",";
          }
    }
    config+="}";

答案 2 :(得分:1)

以下代码将检查regex是否为空行。这也应该

 if (sCurrentLine != null){
            if (!sCurrentLine.matches("^\\s*$"))  // matches empty lines
                    config += ",";
        }