I would just use a script to go from CSV to JSON. You don't need a GIS or any special libraries, just string handling. Here's a Python example.
First, set up some string placeholders:
header = '{ "type": "Feature", "properties": { "ID": '
seg1 = '{} '
seg2 = '}, "geometry": { "type": "LineString", "coordinates": [ [ '
seg3 = '{}, {} ], [ {}, {} ] ] '
seg4 = '} }\n'
Now read the CSV. For each line, create the GeoJSON for the simple segment format and save to a file:
with open('Segments.csv','r') as f:
with open('OUTPUT.geojson','w') as g:
# read the header line
line = f.readline()
for line in f:
l = line.strip()
_ = l.split(',')
i,a,b,c,d = [float(x) for x in _]
g.write(header+seg1.format(int(i))+seg2+seg3.format(a,b,c,d)+seg4)
Your CSV File
TripID,x1,y1,x2,y2
1,103.62183,1.27624,103.62181,1.29713
2,103.62542,1.39132,103.99923,1.37252
3,103.99156,1.27613,104.00284,1.37564
Output JSON
{ "type": "Feature", "properties": { "ID": 1 }, "geometry": { "type": "LineString", "coordinates": [ [ 103.62183, 1.27624 ], [ 103.62181, 1.29713 ] ] } }
{ "type": "Feature", "properties": { "ID": 2 }, "geometry": { "type": "LineString", "coordinates": [ [ 103.62542, 1.39132 ], [ 103.99923, 1.37252 ] ] } }
{ "type": "Feature", "properties": { "ID": 3 }, "geometry": { "type": "LineString", "coordinates": [ [ 103.99156, 1.27613 ], [ 104.00284, 1.37564 ] ] } }
Output Mapped from JSON in QGIS

This loads correctly in QGIS. I can't speak for other applications. I did it by:
- creating a dummy segment in QGIS,
- saving it to JSON and then
- examining the format.
Only Python was required. No library imports or GIS was required.
- ID was saved as an integer attribute type, as it looked like an integer
- no formatting of floats was done for lat/long, as it was implicit in the CSV.