文本文件的格式:
import java.net.Socket;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Client {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("localhost", 9090);
BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println(input.readLine());
}
}
如何阅读此文件?它由字典组成。它不是json文件。
答案 0 :(得分:0)
如前所述,这不是一组易于解析的统一数据。
由此看来,'赋值'是为您制作自定义阅读器。您需要逐行解析数据。然后你必须决定:你要把它变成一个转换为dict的JSON对象吗?或者您打算立即翻译数据?或者您想要我们的其他方式。决定如果您的代码失败,我们可以在看到代码后帮助您。否则,我们会推测你想做什么或为你做所有的工作。
否则,请检查“如何阅读文件”或“打开文件”
的文件答案 1 :(得分:0)
如果它不是json格式,这是我的答案:
int input = 202;
bool flag = true;
var result = datalist.Where(q => q.CatId == input).FirstOrDefault();
var parrent = datalist.Where(q => q.CatId == result.ParrentId).FirstOrDefault();
var keyword = "";
while (String.IsNullOrEmpty(parrent.Keyword))
{
parrent = datalist.Where(q => q.CatId == parrent.ParrentId).FirstOrDefault();
}
keyword = parrent.Keyword;
我采用了import ast
def find(s, ch):
# returns all indexes of occurrences of char ch in string s
return [i for i, ltr in enumerate(s) if ltr == ch]
# 1. Load your txt file as string
with open('file.txt') as f:
txt = f.read()
# 2. Find occurrences of chars { and }
start = find(txt, '{')
end = find(txt, '}')
# 3. Evaluate the string between corresponding occurrences of { and }
for s, e in zip(start, end):
a_python_dict = ast.literal_eval(txt[s:e+1])
print(a_python_dict)
方法here。
答案 2 :(得分:0)
自定义解析器实现。它收集{和}之间的字符串,然后将其作为JSON加载。如果要加载嵌套字典,则需要添加括号计数器。
import json
result = []
with open('file.txt') as f:
text_block = ''
for line in f:
text = line.strip()
if text == '{':
text_block = text
elif text == '}':
text_block += text
result.append(json.loads(text_block))
else:
text_block += text
print(result)
输出:
[{'id': 2, 'name': 'hari'}, {'id': 4, 'name': 'kumar'}]
答案 3 :(得分:-1)
在我看来,你的文字是json格式!如果是这种情况,答案很简单:
import json
with open('file.txt', 'r') as f:
data = json.loads(f.read())